{
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "iCUZvZvBB7VD",
        "slideshow": {
          "slide_type": "-"
        }
      },
      "source": [
        "# Linear Mixed Effects Models\n",
        "\n",
        "A linear mixed effects model is a simple approach for modeling structured linear relationships (Harville, 1997; Laird and Ware, 1982). Each data point consists of inputs of varying type—categorized into groups—and a real-valued output. A linear mixed effects model is a _hierarchical model_: it shares statistical strength across groups in order to improve inferences about any individual data point.\n",
        "\n",
        "In this tutorial, we demonstrate linear mixed effects models with a real-world example in TensorFlow Probability. We'll use the Edward2 (`tfp.edward2`) and Markov Chain Monte Carlo (`tfp.mcmc`) modules."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 0,
      "metadata": {
        "colab": {
          "autoexec": {
            "startup": false,
            "wait_interval": 0
          }
        },
        "colab_type": "code",
        "id": "2brwVZwEB7VF",
        "slideshow": {
          "slide_type": "-"
        }
      },
      "outputs": [],
      "source": [
        "%matplotlib inline\n",
        "from __future__ import absolute_import\n",
        "from __future__ import division\n",
        "from __future__ import print_function\n",
        "\n",
        "import csv\n",
        "import IPython\n",
        "import matplotlib.pyplot as plt\n",
        "import numpy as np\n",
        "import pandas as pd\n",
        "import requests\n",
        "import tensorflow as tf\n",
        "import tensorflow_probability as tfp\n",
        "import warnings\n",
        "\n",
        "from tensorflow_probability import edward2 as ed\n",
        "\n",
        "plt.style.use('ggplot')"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "eikJTmPgB7VJ",
        "slideshow": {
          "slide_type": "-"
        }
      },
      "source": [
        "## Data\n",
        "\n",
        "We use the `InstEval` data set from the popular [`lme4` package in R](https://CRAN.R-project.org/package=lme4) (Bates et al., 2015). It is a data set of courses and their evaluation ratings. Each course includes metadata such as `students`, `instructors`, and `departments`, and the response variable of interest is the evaluation rating."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 0,
      "metadata": {
        "colab": {
          "autoexec": {
            "startup": false,
            "wait_interval": 0
          }
        },
        "colab_type": "code",
        "id": "lZ8OfS3cDMeG"
      },
      "outputs": [],
      "source": [
        "def load_insteval():\n",
        "  \"\"\"Loads the InstEval data set.\n",
        "\n",
        "  It contains 73,421 university lecture evaluations by students at ETH\n",
        "  Zurich with a total of 2,972 students, 2,160 professors and\n",
        "  lecturers, and several student, lecture, and lecturer attributes.\n",
        "  Implementation is built from the `observations` Python package.\n",
        "\n",
        "  Returns:\n",
        "    Tuple of np.darray `x_train` with 73,421 rows and 7 columns and\n",
        "    dictionary `metadata` of column headers (feature names).\n",
        "  \"\"\"\n",
        "  url = ('https://raw.github.com/vincentarelbundock/Rdatasets/master/csv/'\n",
        "         'lme4/InstEval.csv')\n",
        "  with requests.Session() as s:\n",
        "    download = s.get(url)\n",
        "    f = download.content.decode().splitlines()\n",
        "\n",
        "  iterator = csv.reader(f)\n",
        "  columns = next(iterator)[1:]\n",
        "  x_train = np.array([row[1:] for row in iterator], dtype=np.int)\n",
        "  metadata = {'columns': columns}\n",
        "  return x_train, metadata"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "Um0EhvaDQcVI"
      },
      "source": [
        "We load and preprocess the data set. We hold out 20% of the data so we can evaluate our fitted model on unseen data points. Below we visualize the first few rows."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 0,
      "metadata": {
        "colab": {
          "autoexec": {
            "startup": false,
            "wait_interval": 0
          },
          "height": 204
        },
        "colab_type": "code",
        "executionInfo": {
          "elapsed": 66,
          "status": "ok",
          "timestamp": 1522960059205,
          "user": {
            "displayName": "",
            "photoUrl": "",
            "userId": ""
          },
          "user_tz": 420
        },
        "id": "YY_VbNt6fkcp",
        "outputId": "517ba48b-6692-4c45-e557-c704721506b8"
      },
      "outputs": [
        {
          "data": {
            "text/html": [
              "\u003cdiv style=\"max-width:1500px;overflow:auto;\"\u003e\n",
              "\u003cstyle scoped\u003e\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "\u003c/style\u003e\n",
              "\u003ctable border=\"1\" class=\"dataframe\"\u003e\n",
              "  \u003cthead\u003e\n",
              "    \u003ctr style=\"text-align: right;\"\u003e\n",
              "      \u003cth\u003e\u003c/th\u003e\n",
              "      \u003cth\u003estudents\u003c/th\u003e\n",
              "      \u003cth\u003einstructors\u003c/th\u003e\n",
              "      \u003cth\u003estudage\u003c/th\u003e\n",
              "      \u003cth\u003electage\u003c/th\u003e\n",
              "      \u003cth\u003eservice\u003c/th\u003e\n",
              "      \u003cth\u003edepartments\u003c/th\u003e\n",
              "      \u003cth\u003eratings\u003c/th\u003e\n",
              "    \u003c/tr\u003e\n",
              "  \u003c/thead\u003e\n",
              "  \u003ctbody\u003e\n",
              "    \u003ctr\u003e\n",
              "      \u003cth\u003e47529\u003c/th\u003e\n",
              "      \u003ctd\u003e1912\u003c/td\u003e\n",
              "      \u003ctd\u003e317\u003c/td\u003e\n",
              "      \u003ctd\u003e6\u003c/td\u003e\n",
              "      \u003ctd\u003e6\u003c/td\u003e\n",
              "      \u003ctd\u003e0\u003c/td\u003e\n",
              "      \u003ctd\u003e4\u003c/td\u003e\n",
              "      \u003ctd\u003e5\u003c/td\u003e\n",
              "    \u003c/tr\u003e\n",
              "    \u003ctr\u003e\n",
              "      \u003cth\u003e14058\u003c/th\u003e\n",
              "      \u003ctd\u003e544\u003c/td\u003e\n",
              "      \u003ctd\u003e361\u003c/td\u003e\n",
              "      \u003ctd\u003e4\u003c/td\u003e\n",
              "      \u003ctd\u003e3\u003c/td\u003e\n",
              "      \u003ctd\u003e0\u003c/td\u003e\n",
              "      \u003ctd\u003e11\u003c/td\u003e\n",
              "      \u003ctd\u003e3\u003c/td\u003e\n",
              "    \u003c/tr\u003e\n",
              "    \u003ctr\u003e\n",
              "      \u003cth\u003e36732\u003c/th\u003e\n",
              "      \u003ctd\u003e1494\u003c/td\u003e\n",
              "      \u003ctd\u003e565\u003c/td\u003e\n",
              "      \u003ctd\u003e8\u003c/td\u003e\n",
              "      \u003ctd\u003e3\u003c/td\u003e\n",
              "      \u003ctd\u003e1\u003c/td\u003e\n",
              "      \u003ctd\u003e3\u003c/td\u003e\n",
              "      \u003ctd\u003e4\u003c/td\u003e\n",
              "    \u003c/tr\u003e\n",
              "    \u003ctr\u003e\n",
              "      \u003cth\u003e47888\u003c/th\u003e\n",
              "      \u003ctd\u003e1928\u003c/td\u003e\n",
              "      \u003ctd\u003e321\u003c/td\u003e\n",
              "      \u003ctd\u003e2\u003c/td\u003e\n",
              "      \u003ctd\u003e1\u003c/td\u003e\n",
              "      \u003ctd\u003e1\u003c/td\u003e\n",
              "      \u003ctd\u003e7\u003c/td\u003e\n",
              "      \u003ctd\u003e4\u003c/td\u003e\n",
              "    \u003c/tr\u003e\n",
              "    \u003ctr\u003e\n",
              "      \u003cth\u003e29862\u003c/th\u003e\n",
              "      \u003ctd\u003e1210\u003c/td\u003e\n",
              "      \u003ctd\u003e383\u003c/td\u003e\n",
              "      \u003ctd\u003e4\u003c/td\u003e\n",
              "      \u003ctd\u003e4\u003c/td\u003e\n",
              "      \u003ctd\u003e1\u003c/td\u003e\n",
              "      \u003ctd\u003e6\u003c/td\u003e\n",
              "      \u003ctd\u003e3\u003c/td\u003e\n",
              "    \u003c/tr\u003e\n",
              "  \u003c/tbody\u003e\n",
              "\u003c/table\u003e\n",
              "\u003c/div\u003e"
            ],
            "text/plain": [
              "       students  instructors  studage  lectage  service  departments  ratings\n",
              "47529      1912          317        6        6        0            4        5\n",
              "14058       544          361        4        3        0           11        3\n",
              "36732      1494          565        8        3        1            3        4\n",
              "47888      1928          321        2        1        1            7        4\n",
              "29862      1210          383        4        4        1            6        3"
            ]
          },
          "execution_count": 5,
          "metadata": {
            "tags": []
          },
          "output_type": "execute_result"
        }
      ],
      "source": [
        "data, metadata = load_insteval()\n",
        "data = pd.DataFrame(data, columns=metadata['columns'])\n",
        "data = data.rename(columns={'s': 'students',\n",
        "                            'd': 'instructors',\n",
        "                            'dept': 'departments',\n",
        "                            'y': 'ratings'})\n",
        "data['students'] -= 1  # start index by 0\n",
        "# Remap categories to start from 0 and end at max(category).\n",
        "data['instructors'] = data['instructors'].astype('category').cat.codes\n",
        "data['departments'] = data['departments'].astype('category').cat.codes\n",
        "\n",
        "train = data.sample(frac=0.8)\n",
        "test = data.drop(train.index)\n",
        "\n",
        "train.head()"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "qWttG6OaVFMO"
      },
      "source": [
        "We set up the data set in terms of a `features` dictionary of inputs and a `labels` output corresponding to the ratings. Each feature is encoded as an integer and each label (evaluation rating) is encoded as a floating point number."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 0,
      "metadata": {
        "colab": {
          "autoexec": {
            "startup": false,
            "wait_interval": 0
          }
        },
        "colab_type": "code",
        "id": "NzfVQJN9B7VQ",
        "slideshow": {
          "slide_type": "-"
        }
      },
      "outputs": [],
      "source": [
        "get_value = lambda dataframe, key, dtype: dataframe[key].values.astype(dtype)\n",
        "features_train = {\n",
        "    k: get_value(train, key=k, dtype=np.int32)\n",
        "    for k in ['students', 'instructors', 'departments', 'service']}\n",
        "labels_train = get_value(train, key='ratings', dtype=np.float32)\n",
        "\n",
        "features_test = {k: get_value(test, key=k, dtype=np.int32)\n",
        "                 for k in ['students', 'instructors', 'departments', 'service']}\n",
        "labels_test = get_value(test, key='ratings', dtype=np.float32)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 5,
      "metadata": {
        "colab": {
          "autoexec": {
            "startup": false,
            "wait_interval": 0
          },
          "height": 85
        },
        "colab_type": "code",
        "executionInfo": {
          "elapsed": 239,
          "status": "ok",
          "timestamp": 1523409608178,
          "user": {
            "displayName": "",
            "photoUrl": "",
            "userId": ""
          },
          "user_tz": 420
        },
        "id": "80ylfxWtB7VT",
        "outputId": "50ec4661-f4ab-4255-c20d-66b7adf7cb60",
        "slideshow": {
          "slide_type": "-"
        }
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "Number of students: 2972\n",
            "Number of instructors: 1128\n",
            "Number of departments: 14\n",
            "Number of observations: 58737\n"
          ]
        }
      ],
      "source": [
        "num_students = max(features_train['students']) + 1\n",
        "num_instructors = max(features_train['instructors']) + 1\n",
        "num_departments = max(features_train['departments']) + 1\n",
        "num_observations = train.shape[0]\n",
        "\n",
        "print(\"Number of students:\", num_students)\n",
        "print(\"Number of instructors:\", num_instructors)\n",
        "print(\"Number of departments:\", num_departments)\n",
        "print(\"Number of observations:\", num_observations)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "jMRMLuWwB7VX",
        "slideshow": {
          "slide_type": "-"
        }
      },
      "source": [
        "## Model\n",
        "\n",
        "A typical linear model assumes independence, where any pair of data points has a constant linear relationship. In the `InstEval` data set, observations arise in groups each of which may have varying slopes and intercepts. Linear mixed effects models, also known as hierarchical linear models or multilevel linear models, capture this phenomenon (Gelman \u0026 Hill, 2006).\n",
        "\n",
        "Examples of this phenomenon include:\n",
        "\n",
        "+ __Students__. Observations from a student are not independent: some students may systematically give low (or high) lecture ratings.\n",
        "+ __Instructors__. Observations from an instructor are not independent: we expect good teachers to generally have good ratings and bad teachers to generally have bad ratings.\n",
        "+ __Departments__. Observations from a department are not independent: certain departments may generally have dry material or stricter grading and thus be rated lower than others.\n",
        "\n",
        "To capture this, recall that for a data set of $N\\times D$ features $\\mathbf{X}$ and $N$ labels $\\mathbf{y}$, linear regression posits the model\n",
        "\n",
        "\\begin{equation*}\n",
        "\\mathbf{y} = \\mathbf{X}\\beta + \\alpha + \\epsilon,\n",
        "\\end{equation*}\n",
        "\n",
        "where there is a slope vector $\\beta\\in\\mathbb{R}^D$, intercept $\\alpha\\in\\mathbb{R}$, and random noise $\\epsilon\\sim\\mathcal{N}(\\mathbf{0}, \\mathbf{I})$. We say that $\\beta$ and $\\alpha$ are \"fixed effects\": they are effects held constant across the population of data points $(x, y)$. An equivalent formulation of the equation as a likelihood is $\\mathbf{y} \\sim \\operatorname{Normal}(\\mathbf{X}\\beta + \\alpha, \\mathbf{I})$. This likelihood is maximized during inference in order to find point estimates of $\\beta$ and $\\alpha$ that fit the data.\n",
        "\n",
        "A linear mixed effects model extends linear regression as\n",
        "\n",
        "\\begin{align*}\n",
        "\\eta \u0026\\sim \\mathcal{N}(\\mathbf{0}, \\sigma^2 \\mathbf{I}), \\\\\n",
        "\\mathbf{y} \u0026= \\mathbf{X}\\beta + \\mathbf{Z}\\eta + \\alpha + \\epsilon.\n",
        "\\end{align*}\n",
        "\n",
        "where there is still a slope vector $\\beta\\in\\mathbb{R}^P$, intercept $\\alpha\\in\\mathbb{R}$, and random noise $\\epsilon\\sim\\mathcal{N}(\\mathbf{0}, \\mathbf{I})$. In addition, there is a term $\\mathbf{Z}\\eta$, where $\\mathbf{Z}$ is a features matrix and $\\eta\\in\\mathbb{R}^Q$ is a vector of random slopes; $\\eta$ is normally distributed with variance component parameter $\\sigma^2$. $\\mathbf{Z}$ is formed by partitioning the original $N\\times D$ features matrix in terms of a new $N\\times P$ matrix $\\mathbf{X}$ and $N\\times Q$ matrix $\\mathbf{Z}$, where $P + Q=D$: this partition allows us to model the features separately using the fixed effects $\\beta$ and the latent variable $\\eta$ respectively.\n",
        "\n",
        "We say the latent variables $\\eta$ are \"random effects\": they are effects that vary across the population (although they may be constant across subpopulations). In particular, because the random effects $\\eta$ have mean 0, the data label's mean is captured by $\\mathbf{X}\\beta + \\alpha$. The random effects component $\\mathbf{Z}\\eta$ captures variations in the data: for example, \"Instructor \\#54 is rated 1.4 points higher than the mean.\""
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "7B6ROTDQdTjH"
      },
      "source": [
        "In this tutorial, we posit the following effects:\n",
        "\n",
        "+ Fixed effects: `service`. `service` is a binary covariate corresponding to whether the course belongs to the instructor's main department. No matter how much additional data we collect, it can only take on values $0$ and $1$.\n",
        "+ Random effects: `students`, `instructors`, and `departments`. Given more observations from the population of course evaluation ratings, we may be looking at new students, teachers, or departments.\n",
        "\n",
        "In the syntax of R's lme4 package (Bates et al., 2015), the model can be summarized as\n",
        "\n",
        "```\n",
        "ratings ~ service + (1|students) + (1|instructors) + (1|departments) + 1\n",
        "```\n",
        "where `x` denotes a fixed effect,`(1|x)` denotes a random effect for `x`, and `1` denotes an intercept term.\n",
        "\n",
        "We implement this model below as an Edward program."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 0,
      "metadata": {
        "colab": {
          "autoexec": {
            "startup": false,
            "wait_interval": 0
          }
        },
        "colab_type": "code",
        "id": "12nqmEIsB7VY",
        "slideshow": {
          "slide_type": "-"
        }
      },
      "outputs": [],
      "source": [
        "def model(features):\n",
        "  # Set up fixed effects and other parameters.\n",
        "  intercept = tf.get_variable(\"intercept\", [])  # alpha in eq\n",
        "  effect_service = tf.get_variable(\"effect_service\", [])  # beta in eq\n",
        "  stddev_students = tf.exp(\n",
        "      tf.get_variable(\"stddev_unconstrained_students\", []))  # sigma in eq\n",
        "  stddev_instructors = tf.exp(\n",
        "      tf.get_variable(\"stddev_unconstrained_instructors\", [])) # sigma in eq\n",
        "  stddev_departments = tf.exp(\n",
        "      tf.get_variable(\"stddev_unconstrained_departments\", [])) # sigma in eq\n",
        "\n",
        "  # Set up random effects.\n",
        "  effect_students = ed.MultivariateNormalDiag(\n",
        "      loc=tf.zeros(num_students),\n",
        "      scale_identity_multiplier=stddev_students,\n",
        "      name=\"effect_students\")\n",
        "  effect_instructors = ed.MultivariateNormalDiag(\n",
        "      loc=tf.zeros(num_instructors),\n",
        "      scale_identity_multiplier=stddev_instructors,\n",
        "      name=\"effect_instructors\")\n",
        "  effect_departments = ed.MultivariateNormalDiag(\n",
        "      loc=tf.zeros(num_departments),\n",
        "      scale_identity_multiplier=stddev_departments,\n",
        "      name=\"effect_departments\")\n",
        "\n",
        "  # Set up likelihood given fixed and random effects.\n",
        "  # Note we use `tf.gather` instead of matrix-multiplying a design matrix of\n",
        "  # one-hot vectors. The latter is memory-intensive if there are many groups.\n",
        "  ratings = ed.Normal(\n",
        "      loc=(effect_service * features[\"service\"] +\n",
        "           tf.gather(effect_students, features[\"students\"]) +\n",
        "           tf.gather(effect_instructors, features[\"instructors\"]) +\n",
        "           tf.gather(effect_departments, features[\"departments\"]) +\n",
        "           intercept),\n",
        "      scale=1.,\n",
        "      name=\"ratings\")\n",
        "  return ratings\n",
        "\n",
        "# Wrap model in a template. All calls to the model template will use the same\n",
        "# TensorFlow variables.\n",
        "model_template = tf.make_template(\"model\", model)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "3G_0t3jiZps2"
      },
      "source": [
        "As an Edward program, we can also visualize the model's structure in terms of its computational graph. This graph encodes dataflow across the random variables in the program, making explicit their relationships in terms of a graphical model (Jordan, 2003).\n",
        "\n",
        "As a statistical tool, we might look at the graph in order to better see, for example, that `intercept` and `effect_service` are conditionally dependent given `ratings`; this may be harder to see from the source code if the program is written with classes, cross references across modules, and/or subroutines. As a computational tool, we might also notice latent variables flow into the `ratings` variable via `tf.gather` ops. This may be a bottleneck on certain hardware accelerators if indexing `Tensor`s is expensive; visualizing the graph makes this readily apparent.\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 7,
      "metadata": {
        "colab": {
          "autoexec": {
            "startup": false,
            "wait_interval": 0
          },
          "height": 641
        },
        "colab_type": "code",
        "executionInfo": {
          "elapsed": 3313,
          "status": "ok",
          "timestamp": 1523409611834,
          "user": {
            "displayName": "",
            "photoUrl": "",
            "userId": ""
          },
          "user_tz": 420
        },
        "id": "ZQQZrTtBZww3",
        "outputId": "f2866a4e-9c05-4f06-9ecb-519b0cf5c0e0"
      },
      "outputs": [
        {
          "data": {
            "text/html": [
              "\n",
              "      \u003ciframe seamless style=\"width:1200px;height:620px;border:0\" srcdoc=\"\n",
              "      \u003cscript\u003e\n",
              "        function load() {\n",
              "          document.getElementById(\u0026quot;graph0.482669299759\u0026quot;).pbtxt = 'node {\\n  name: \u0026quot;intercept/Initializer/random_uniform/shape\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;_class\u0026quot;\\n    value {\\n      list {\\n        s: \u0026quot;loc:@intercept\u0026quot;\\n      }\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n          }\\n        }\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;intercept/Initializer/random_uniform/min\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;_class\u0026quot;\\n    value {\\n      list {\\n        s: \u0026quot;loc:@intercept\u0026quot;\\n      }\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_FLOAT\\n        tensor_shape {\\n        }\\n        float_val: -1.73205077648\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;intercept/Initializer/random_uniform/max\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;_class\u0026quot;\\n    value {\\n      list {\\n        s: \u0026quot;loc:@intercept\u0026quot;\\n      }\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_FLOAT\\n        tensor_shape {\\n        }\\n        float_val: 1.73205077648\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;intercept/Initializer/random_uniform/RandomUniform\u0026quot;\\n  op: \u0026quot;RandomUniform\u0026quot;\\n  input: \u0026quot;intercept/Initializer/random_uniform/shape\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;_class\u0026quot;\\n    value {\\n      list {\\n        s: \u0026quot;loc:@intercept\u0026quot;\\n      }\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;seed\u0026quot;\\n    value {\\n      i: 0\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;seed2\u0026quot;\\n    value {\\n      i: 0\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;intercept/Initializer/random_uniform/sub\u0026quot;\\n  op: \u0026quot;Sub\u0026quot;\\n  input: \u0026quot;intercept/Initializer/random_uniform/max\u0026quot;\\n  input: \u0026quot;intercept/Initializer/random_uniform/min\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;_class\u0026quot;\\n    value {\\n      list {\\n        s: \u0026quot;loc:@intercept\u0026quot;\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;intercept/Initializer/random_uniform/mul\u0026quot;\\n  op: \u0026quot;Mul\u0026quot;\\n  input: \u0026quot;intercept/Initializer/random_uniform/RandomUniform\u0026quot;\\n  input: \u0026quot;intercept/Initializer/random_uniform/sub\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;_class\u0026quot;\\n    value {\\n      list {\\n        s: \u0026quot;loc:@intercept\u0026quot;\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;intercept/Initializer/random_uniform\u0026quot;\\n  op: \u0026quot;Add\u0026quot;\\n  input: \u0026quot;intercept/Initializer/random_uniform/mul\u0026quot;\\n  input: \u0026quot;intercept/Initializer/random_uniform/min\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;_class\u0026quot;\\n    value {\\n      list {\\n        s: \u0026quot;loc:@intercept\u0026quot;\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;intercept\u0026quot;\\n  op: \u0026quot;VariableV2\u0026quot;\\n  attr {\\n    key: \u0026quot;_class\u0026quot;\\n    value {\\n      list {\\n        s: \u0026quot;loc:@intercept\u0026quot;\\n      }\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;container\u0026quot;\\n    value {\\n      s: \u0026quot;\u0026quot;\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;shape\u0026quot;\\n    value {\\n      shape {\\n      }\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;shared_name\u0026quot;\\n    value {\\n      s: \u0026quot;\u0026quot;\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;intercept/Assign\u0026quot;\\n  op: \u0026quot;Assign\u0026quot;\\n  input: \u0026quot;intercept\u0026quot;\\n  input: \u0026quot;intercept/Initializer/random_uniform\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;_class\u0026quot;\\n    value {\\n      list {\\n        s: \u0026quot;loc:@intercept\u0026quot;\\n      }\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;use_locking\u0026quot;\\n    value {\\n      b: true\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;validate_shape\u0026quot;\\n    value {\\n      b: true\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;intercept/read\u0026quot;\\n  op: \u0026quot;Identity\u0026quot;\\n  input: \u0026quot;intercept\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;_class\u0026quot;\\n    value {\\n      list {\\n        s: \u0026quot;loc:@intercept\u0026quot;\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_service/Initializer/random_uniform/shape\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;_class\u0026quot;\\n    value {\\n      list {\\n        s: \u0026quot;loc:@effect_service\u0026quot;\\n      }\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n          }\\n        }\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_service/Initializer/random_uniform/min\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;_class\u0026quot;\\n    value {\\n      list {\\n        s: \u0026quot;loc:@effect_service\u0026quot;\\n      }\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_FLOAT\\n        tensor_shape {\\n        }\\n        float_val: -1.73205077648\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_service/Initializer/random_uniform/max\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;_class\u0026quot;\\n    value {\\n      list {\\n        s: \u0026quot;loc:@effect_service\u0026quot;\\n      }\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_FLOAT\\n        tensor_shape {\\n        }\\n        float_val: 1.73205077648\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_service/Initializer/random_uniform/RandomUniform\u0026quot;\\n  op: \u0026quot;RandomUniform\u0026quot;\\n  input: \u0026quot;effect_service/Initializer/random_uniform/shape\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;_class\u0026quot;\\n    value {\\n      list {\\n        s: \u0026quot;loc:@effect_service\u0026quot;\\n      }\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;seed\u0026quot;\\n    value {\\n      i: 0\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;seed2\u0026quot;\\n    value {\\n      i: 0\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_service/Initializer/random_uniform/sub\u0026quot;\\n  op: \u0026quot;Sub\u0026quot;\\n  input: \u0026quot;effect_service/Initializer/random_uniform/max\u0026quot;\\n  input: \u0026quot;effect_service/Initializer/random_uniform/min\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;_class\u0026quot;\\n    value {\\n      list {\\n        s: \u0026quot;loc:@effect_service\u0026quot;\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_service/Initializer/random_uniform/mul\u0026quot;\\n  op: \u0026quot;Mul\u0026quot;\\n  input: \u0026quot;effect_service/Initializer/random_uniform/RandomUniform\u0026quot;\\n  input: \u0026quot;effect_service/Initializer/random_uniform/sub\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;_class\u0026quot;\\n    value {\\n      list {\\n        s: \u0026quot;loc:@effect_service\u0026quot;\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_service/Initializer/random_uniform\u0026quot;\\n  op: \u0026quot;Add\u0026quot;\\n  input: \u0026quot;effect_service/Initializer/random_uniform/mul\u0026quot;\\n  input: \u0026quot;effect_service/Initializer/random_uniform/min\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;_class\u0026quot;\\n    value {\\n      list {\\n        s: \u0026quot;loc:@effect_service\u0026quot;\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_service\u0026quot;\\n  op: \u0026quot;VariableV2\u0026quot;\\n  attr {\\n    key: \u0026quot;_class\u0026quot;\\n    value {\\n      list {\\n        s: \u0026quot;loc:@effect_service\u0026quot;\\n      }\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;container\u0026quot;\\n    value {\\n      s: \u0026quot;\u0026quot;\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;shape\u0026quot;\\n    value {\\n      shape {\\n      }\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;shared_name\u0026quot;\\n    value {\\n      s: \u0026quot;\u0026quot;\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_service/Assign\u0026quot;\\n  op: \u0026quot;Assign\u0026quot;\\n  input: \u0026quot;effect_service\u0026quot;\\n  input: \u0026quot;effect_service/Initializer/random_uniform\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;_class\u0026quot;\\n    value {\\n      list {\\n        s: \u0026quot;loc:@effect_service\u0026quot;\\n      }\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;use_locking\u0026quot;\\n    value {\\n      b: true\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;validate_shape\u0026quot;\\n    value {\\n      b: true\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_service/read\u0026quot;\\n  op: \u0026quot;Identity\u0026quot;\\n  input: \u0026quot;effect_service\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;_class\u0026quot;\\n    value {\\n      list {\\n        s: \u0026quot;loc:@effect_service\u0026quot;\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;stddev_unconstrained_students/Initializer/random_uniform/shape\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;_class\u0026quot;\\n    value {\\n      list {\\n        s: \u0026quot;loc:@stddev_unconstrained_students\u0026quot;\\n      }\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n          }\\n        }\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;stddev_unconstrained_students/Initializer/random_uniform/min\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;_class\u0026quot;\\n    value {\\n      list {\\n        s: \u0026quot;loc:@stddev_unconstrained_students\u0026quot;\\n      }\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_FLOAT\\n        tensor_shape {\\n        }\\n        float_val: -1.73205077648\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;stddev_unconstrained_students/Initializer/random_uniform/max\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;_class\u0026quot;\\n    value {\\n      list {\\n        s: \u0026quot;loc:@stddev_unconstrained_students\u0026quot;\\n      }\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_FLOAT\\n        tensor_shape {\\n        }\\n        float_val: 1.73205077648\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;stddev_unconstrained_students/Initializer/random_uniform/RandomUniform\u0026quot;\\n  op: \u0026quot;RandomUniform\u0026quot;\\n  input: \u0026quot;stddev_unconstrained_students/Initializer/random_uniform/shape\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;_class\u0026quot;\\n    value {\\n      list {\\n        s: \u0026quot;loc:@stddev_unconstrained_students\u0026quot;\\n      }\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;seed\u0026quot;\\n    value {\\n      i: 0\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;seed2\u0026quot;\\n    value {\\n      i: 0\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;stddev_unconstrained_students/Initializer/random_uniform/sub\u0026quot;\\n  op: \u0026quot;Sub\u0026quot;\\n  input: \u0026quot;stddev_unconstrained_students/Initializer/random_uniform/max\u0026quot;\\n  input: \u0026quot;stddev_unconstrained_students/Initializer/random_uniform/min\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;_class\u0026quot;\\n    value {\\n      list {\\n        s: \u0026quot;loc:@stddev_unconstrained_students\u0026quot;\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;stddev_unconstrained_students/Initializer/random_uniform/mul\u0026quot;\\n  op: \u0026quot;Mul\u0026quot;\\n  input: \u0026quot;stddev_unconstrained_students/Initializer/random_uniform/RandomUniform\u0026quot;\\n  input: \u0026quot;stddev_unconstrained_students/Initializer/random_uniform/sub\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;_class\u0026quot;\\n    value {\\n      list {\\n        s: \u0026quot;loc:@stddev_unconstrained_students\u0026quot;\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;stddev_unconstrained_students/Initializer/random_uniform\u0026quot;\\n  op: \u0026quot;Add\u0026quot;\\n  input: \u0026quot;stddev_unconstrained_students/Initializer/random_uniform/mul\u0026quot;\\n  input: \u0026quot;stddev_unconstrained_students/Initializer/random_uniform/min\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;_class\u0026quot;\\n    value {\\n      list {\\n        s: \u0026quot;loc:@stddev_unconstrained_students\u0026quot;\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;stddev_unconstrained_students\u0026quot;\\n  op: \u0026quot;VariableV2\u0026quot;\\n  attr {\\n    key: \u0026quot;_class\u0026quot;\\n    value {\\n      list {\\n        s: \u0026quot;loc:@stddev_unconstrained_students\u0026quot;\\n      }\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;container\u0026quot;\\n    value {\\n      s: \u0026quot;\u0026quot;\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;shape\u0026quot;\\n    value {\\n      shape {\\n      }\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;shared_name\u0026quot;\\n    value {\\n      s: \u0026quot;\u0026quot;\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;stddev_unconstrained_students/Assign\u0026quot;\\n  op: \u0026quot;Assign\u0026quot;\\n  input: \u0026quot;stddev_unconstrained_students\u0026quot;\\n  input: \u0026quot;stddev_unconstrained_students/Initializer/random_uniform\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;_class\u0026quot;\\n    value {\\n      list {\\n        s: \u0026quot;loc:@stddev_unconstrained_students\u0026quot;\\n      }\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;use_locking\u0026quot;\\n    value {\\n      b: true\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;validate_shape\u0026quot;\\n    value {\\n      b: true\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;stddev_unconstrained_students/read\u0026quot;\\n  op: \u0026quot;Identity\u0026quot;\\n  input: \u0026quot;stddev_unconstrained_students\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;_class\u0026quot;\\n    value {\\n      list {\\n        s: \u0026quot;loc:@stddev_unconstrained_students\u0026quot;\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;Exp\u0026quot;\\n  op: \u0026quot;Exp\u0026quot;\\n  input: \u0026quot;stddev_unconstrained_students/read\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;stddev_unconstrained_instructors/Initializer/random_uniform/shape\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;_class\u0026quot;\\n    value {\\n      list {\\n        s: \u0026quot;loc:@stddev_unconstrained_instructors\u0026quot;\\n      }\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n          }\\n        }\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;stddev_unconstrained_instructors/Initializer/random_uniform/min\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;_class\u0026quot;\\n    value {\\n      list {\\n        s: \u0026quot;loc:@stddev_unconstrained_instructors\u0026quot;\\n      }\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_FLOAT\\n        tensor_shape {\\n        }\\n        float_val: -1.73205077648\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;stddev_unconstrained_instructors/Initializer/random_uniform/max\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;_class\u0026quot;\\n    value {\\n      list {\\n        s: \u0026quot;loc:@stddev_unconstrained_instructors\u0026quot;\\n      }\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_FLOAT\\n        tensor_shape {\\n        }\\n        float_val: 1.73205077648\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;stddev_unconstrained_instructors/Initializer/random_uniform/RandomUniform\u0026quot;\\n  op: \u0026quot;RandomUniform\u0026quot;\\n  input: \u0026quot;stddev_unconstrained_instructors/Initializer/random_uniform/shape\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;_class\u0026quot;\\n    value {\\n      list {\\n        s: \u0026quot;loc:@stddev_unconstrained_instructors\u0026quot;\\n      }\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;seed\u0026quot;\\n    value {\\n      i: 0\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;seed2\u0026quot;\\n    value {\\n      i: 0\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;stddev_unconstrained_instructors/Initializer/random_uniform/sub\u0026quot;\\n  op: \u0026quot;Sub\u0026quot;\\n  input: \u0026quot;stddev_unconstrained_instructors/Initializer/random_uniform/max\u0026quot;\\n  input: \u0026quot;stddev_unconstrained_instructors/Initializer/random_uniform/min\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;_class\u0026quot;\\n    value {\\n      list {\\n        s: \u0026quot;loc:@stddev_unconstrained_instructors\u0026quot;\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;stddev_unconstrained_instructors/Initializer/random_uniform/mul\u0026quot;\\n  op: \u0026quot;Mul\u0026quot;\\n  input: \u0026quot;stddev_unconstrained_instructors/Initializer/random_uniform/RandomUniform\u0026quot;\\n  input: \u0026quot;stddev_unconstrained_instructors/Initializer/random_uniform/sub\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;_class\u0026quot;\\n    value {\\n      list {\\n        s: \u0026quot;loc:@stddev_unconstrained_instructors\u0026quot;\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;stddev_unconstrained_instructors/Initializer/random_uniform\u0026quot;\\n  op: \u0026quot;Add\u0026quot;\\n  input: \u0026quot;stddev_unconstrained_instructors/Initializer/random_uniform/mul\u0026quot;\\n  input: \u0026quot;stddev_unconstrained_instructors/Initializer/random_uniform/min\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;_class\u0026quot;\\n    value {\\n      list {\\n        s: \u0026quot;loc:@stddev_unconstrained_instructors\u0026quot;\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;stddev_unconstrained_instructors\u0026quot;\\n  op: \u0026quot;VariableV2\u0026quot;\\n  attr {\\n    key: \u0026quot;_class\u0026quot;\\n    value {\\n      list {\\n        s: \u0026quot;loc:@stddev_unconstrained_instructors\u0026quot;\\n      }\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;container\u0026quot;\\n    value {\\n      s: \u0026quot;\u0026quot;\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;shape\u0026quot;\\n    value {\\n      shape {\\n      }\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;shared_name\u0026quot;\\n    value {\\n      s: \u0026quot;\u0026quot;\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;stddev_unconstrained_instructors/Assign\u0026quot;\\n  op: \u0026quot;Assign\u0026quot;\\n  input: \u0026quot;stddev_unconstrained_instructors\u0026quot;\\n  input: \u0026quot;stddev_unconstrained_instructors/Initializer/random_uniform\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;_class\u0026quot;\\n    value {\\n      list {\\n        s: \u0026quot;loc:@stddev_unconstrained_instructors\u0026quot;\\n      }\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;use_locking\u0026quot;\\n    value {\\n      b: true\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;validate_shape\u0026quot;\\n    value {\\n      b: true\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;stddev_unconstrained_instructors/read\u0026quot;\\n  op: \u0026quot;Identity\u0026quot;\\n  input: \u0026quot;stddev_unconstrained_instructors\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;_class\u0026quot;\\n    value {\\n      list {\\n        s: \u0026quot;loc:@stddev_unconstrained_instructors\u0026quot;\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;Exp_1\u0026quot;\\n  op: \u0026quot;Exp\u0026quot;\\n  input: \u0026quot;stddev_unconstrained_instructors/read\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;stddev_unconstrained_departments/Initializer/random_uniform/shape\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;_class\u0026quot;\\n    value {\\n      list {\\n        s: \u0026quot;loc:@stddev_unconstrained_departments\u0026quot;\\n      }\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n          }\\n        }\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;stddev_unconstrained_departments/Initializer/random_uniform/min\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;_class\u0026quot;\\n    value {\\n      list {\\n        s: \u0026quot;loc:@stddev_unconstrained_departments\u0026quot;\\n      }\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_FLOAT\\n        tensor_shape {\\n        }\\n        float_val: -1.73205077648\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;stddev_unconstrained_departments/Initializer/random_uniform/max\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;_class\u0026quot;\\n    value {\\n      list {\\n        s: \u0026quot;loc:@stddev_unconstrained_departments\u0026quot;\\n      }\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_FLOAT\\n        tensor_shape {\\n        }\\n        float_val: 1.73205077648\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;stddev_unconstrained_departments/Initializer/random_uniform/RandomUniform\u0026quot;\\n  op: \u0026quot;RandomUniform\u0026quot;\\n  input: \u0026quot;stddev_unconstrained_departments/Initializer/random_uniform/shape\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;_class\u0026quot;\\n    value {\\n      list {\\n        s: \u0026quot;loc:@stddev_unconstrained_departments\u0026quot;\\n      }\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;seed\u0026quot;\\n    value {\\n      i: 0\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;seed2\u0026quot;\\n    value {\\n      i: 0\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;stddev_unconstrained_departments/Initializer/random_uniform/sub\u0026quot;\\n  op: \u0026quot;Sub\u0026quot;\\n  input: \u0026quot;stddev_unconstrained_departments/Initializer/random_uniform/max\u0026quot;\\n  input: \u0026quot;stddev_unconstrained_departments/Initializer/random_uniform/min\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;_class\u0026quot;\\n    value {\\n      list {\\n        s: \u0026quot;loc:@stddev_unconstrained_departments\u0026quot;\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;stddev_unconstrained_departments/Initializer/random_uniform/mul\u0026quot;\\n  op: \u0026quot;Mul\u0026quot;\\n  input: \u0026quot;stddev_unconstrained_departments/Initializer/random_uniform/RandomUniform\u0026quot;\\n  input: \u0026quot;stddev_unconstrained_departments/Initializer/random_uniform/sub\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;_class\u0026quot;\\n    value {\\n      list {\\n        s: \u0026quot;loc:@stddev_unconstrained_departments\u0026quot;\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;stddev_unconstrained_departments/Initializer/random_uniform\u0026quot;\\n  op: \u0026quot;Add\u0026quot;\\n  input: \u0026quot;stddev_unconstrained_departments/Initializer/random_uniform/mul\u0026quot;\\n  input: \u0026quot;stddev_unconstrained_departments/Initializer/random_uniform/min\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;_class\u0026quot;\\n    value {\\n      list {\\n        s: \u0026quot;loc:@stddev_unconstrained_departments\u0026quot;\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;stddev_unconstrained_departments\u0026quot;\\n  op: \u0026quot;VariableV2\u0026quot;\\n  attr {\\n    key: \u0026quot;_class\u0026quot;\\n    value {\\n      list {\\n        s: \u0026quot;loc:@stddev_unconstrained_departments\u0026quot;\\n      }\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;container\u0026quot;\\n    value {\\n      s: \u0026quot;\u0026quot;\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;shape\u0026quot;\\n    value {\\n      shape {\\n      }\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;shared_name\u0026quot;\\n    value {\\n      s: \u0026quot;\u0026quot;\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;stddev_unconstrained_departments/Assign\u0026quot;\\n  op: \u0026quot;Assign\u0026quot;\\n  input: \u0026quot;stddev_unconstrained_departments\u0026quot;\\n  input: \u0026quot;stddev_unconstrained_departments/Initializer/random_uniform\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;_class\u0026quot;\\n    value {\\n      list {\\n        s: \u0026quot;loc:@stddev_unconstrained_departments\u0026quot;\\n      }\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;use_locking\u0026quot;\\n    value {\\n      b: true\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;validate_shape\u0026quot;\\n    value {\\n      b: true\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;stddev_unconstrained_departments/read\u0026quot;\\n  op: \u0026quot;Identity\u0026quot;\\n  input: \u0026quot;stddev_unconstrained_departments\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;_class\u0026quot;\\n    value {\\n      list {\\n        s: \u0026quot;loc:@stddev_unconstrained_departments\u0026quot;\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;Exp_2\u0026quot;\\n  op: \u0026quot;Exp\u0026quot;\\n  input: \u0026quot;stddev_unconstrained_departments/read\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;zeros/shape_as_tensor\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 1\\n          }\\n        }\\n        int_val: 2972\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;zeros/Const\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_FLOAT\\n        tensor_shape {\\n        }\\n        float_val: 0.0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;zeros\u0026quot;\\n  op: \u0026quot;Fill\u0026quot;\\n  input: \u0026quot;zeros/shape_as_tensor\u0026quot;\\n  input: \u0026quot;zeros/Const\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;index_type\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students/init/make_diag_scale/LinearOperatorScaledIdentity/ExpandDims/dim\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: -1\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students/init/make_diag_scale/LinearOperatorScaledIdentity/ExpandDims\u0026quot;\\n  op: \u0026quot;ExpandDims\u0026quot;\\n  input: \u0026quot;Exp\u0026quot;\\n  input: \u0026quot;effect_students/init/make_diag_scale/LinearOperatorScaledIdentity/ExpandDims/dim\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;Tdim\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students/init/make_diag_scale/LinearOperatorScaledIdentity/ExpandDims_1/dim\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: -1\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students/init/make_diag_scale/LinearOperatorScaledIdentity/ExpandDims_1\u0026quot;\\n  op: \u0026quot;ExpandDims\u0026quot;\\n  input: \u0026quot;effect_students/init/make_diag_scale/LinearOperatorScaledIdentity/ExpandDims\u0026quot;\\n  input: \u0026quot;effect_students/init/make_diag_scale/LinearOperatorScaledIdentity/ExpandDims_1/dim\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;Tdim\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students/init/make_diag_scale/LinearOperatorScaledIdentity/Abs\u0026quot;\\n  op: \u0026quot;Abs\u0026quot;\\n  input: \u0026quot;Exp\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students/init/make_diag_scale/LinearOperatorScaledIdentity/num_rows\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 2972\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students/init/make_diag_scale/LinearOperatorScaledIdentity/Cast\u0026quot;\\n  op: \u0026quot;Cast\u0026quot;\\n  input: \u0026quot;effect_students/init/make_diag_scale/LinearOperatorScaledIdentity/num_rows\u0026quot;\\n  attr {\\n    key: \u0026quot;DstT\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;SrcT\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students/init/make_diag_scale/LinearOperatorScaledIdentity/Cast_1\u0026quot;\\n  op: \u0026quot;Cast\u0026quot;\\n  input: \u0026quot;effect_students/init/make_diag_scale/LinearOperatorScaledIdentity/num_rows\u0026quot;\\n  attr {\\n    key: \u0026quot;DstT\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;SrcT\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_1/shapes_from_loc_and_scale/LinearOperatorScaledIdentity/range_dimension_tensor/Const\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 2972\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_1/shapes_from_loc_and_scale/LinearOperatorScaledIdentity_1/batch_shape_tensor/batch_shape\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n          }\\n        }\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_1/shapes_from_loc_and_scale/loc_batch_shape\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n          }\\n        }\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;zeros_1\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_FLOAT\\n        tensor_shape {\\n        }\\n        float_val: 0.0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;ones\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_FLOAT\\n        tensor_shape {\\n        }\\n        float_val: 1.0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;Normal/loc\u0026quot;\\n  op: \u0026quot;Identity\u0026quot;\\n  input: \u0026quot;zeros_1\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;Normal/scale\u0026quot;\\n  op: \u0026quot;Identity\u0026quot;\\n  input: \u0026quot;ones\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;affine_linear_operator/init/event_ndims\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 1\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;affine_linear_operator/init/DistributionShape/init/batch_ndims\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;affine_linear_operator/init/DistributionShape/init/event_ndims\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 1\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;affine_linear_operator/init/Const\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 1\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_2/zero\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_2/empty\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n          }\\n        }\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_2/Normal/is_scalar_batch/is_scalar_batch\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_BOOL\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_BOOL\\n        tensor_shape {\\n        }\\n        bool_val: true\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_2/batch_shape\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n          }\\n        }\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_2/Const\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_2/Const_1\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_2/Const_2\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_BOOL\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_BOOL\\n        tensor_shape {\\n        }\\n        bool_val: true\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_2/Const_3\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_2/Const_4\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_BOOL\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_BOOL\\n        tensor_shape {\\n        }\\n        bool_val: true\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_2/Const_5\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_BOOL\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_BOOL\\n        tensor_shape {\\n        }\\n        bool_val: false\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_2/Normal_1/is_scalar_event/is_scalar_event\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_BOOL\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_BOOL\\n        tensor_shape {\\n        }\\n        bool_val: true\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_2/event_shape\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 1\\n          }\\n        }\\n        int_val: 2972\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_2/Const_6\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 1\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_2/Const_7\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_2/Const_8\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_BOOL\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_BOOL\\n        tensor_shape {\\n        }\\n        bool_val: false\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_2/Const_9\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_BOOL\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_BOOL\\n        tensor_shape {\\n        }\\n        bool_val: false\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_2/Const_10\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_BOOL\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_BOOL\\n        tensor_shape {\\n        }\\n        bool_val: true\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_2/Const_11\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_BOOL\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_BOOL\\n        tensor_shape {\\n        }\\n        bool_val: false\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_2/Const_12\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 1\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_2/Const_13\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_BOOL\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_BOOL\\n        tensor_shape {\\n        }\\n        bool_val: false\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_2/Const_14\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_BOOL\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_BOOL\\n        tensor_shape {\\n        }\\n        bool_val: true\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_2/Const_15\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_BOOL\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_BOOL\\n        tensor_shape {\\n        }\\n        bool_val: true\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_2/Normal_2/is_scalar_batch/is_scalar_batch\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_BOOL\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_BOOL\\n        tensor_shape {\\n        }\\n        bool_val: true\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_2/Const_16\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_BOOL\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_BOOL\\n        tensor_shape {\\n        }\\n        bool_val: false\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_2/Const_17\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_BOOL\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_BOOL\\n        tensor_shape {\\n        }\\n        bool_val: false\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_2/Const_18\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 1\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_2/sub/x\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_2/sub\u0026quot;\\n  op: \u0026quot;Sub\u0026quot;\\n  input: \u0026quot;effect_students_2/sub/x\u0026quot;\\n  input: \u0026quot;effect_students_2/Const_18\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_2/range/limit\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_2/range/delta\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 1\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_2/range\u0026quot;\\n  op: \u0026quot;Range\u0026quot;\\n  input: \u0026quot;effect_students_2/sub\u0026quot;\\n  input: \u0026quot;effect_students_2/range/limit\u0026quot;\\n  input: \u0026quot;effect_students_2/range/delta\u0026quot;\\n  attr {\\n    key: \u0026quot;Tidx\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_3/sample/sample_shape\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n          }\\n        }\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_3/sample/Const\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 1\\n          }\\n        }\\n        int_val: 1\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_3/sample/Const_1\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 2\\n          }\\n        }\\n        tensor_content: \u0026quot;\\\\001\\\\000\\\\000\\\\000\\\\234\\\\013\\\\000\\\\000\u0026quot;\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_3/sample/Normal/sample/Normal/batch_shape_tensor/batch_shape\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n          }\\n        }\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_3/sample/Normal/sample/concat/values_0\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 1\\n          }\\n        }\\n        int_val: 2972\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_3/sample/Normal/sample/concat/axis\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_3/sample/Normal/sample/concat\u0026quot;\\n  op: \u0026quot;ConcatV2\u0026quot;\\n  input: \u0026quot;effect_students_3/sample/Normal/sample/concat/values_0\u0026quot;\\n  input: \u0026quot;effect_students_3/sample/Normal/sample/Normal/batch_shape_tensor/batch_shape\u0026quot;\\n  input: \u0026quot;effect_students_3/sample/Normal/sample/concat/axis\u0026quot;\\n  attr {\\n    key: \u0026quot;N\u0026quot;\\n    value {\\n      i: 2\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;Tidx\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_3/sample/Normal/sample/random_normal/mean\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_FLOAT\\n        tensor_shape {\\n        }\\n        float_val: 0.0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_3/sample/Normal/sample/random_normal/stddev\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_FLOAT\\n        tensor_shape {\\n        }\\n        float_val: 1.0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_3/sample/Normal/sample/random_normal/RandomStandardNormal\u0026quot;\\n  op: \u0026quot;RandomStandardNormal\u0026quot;\\n  input: \u0026quot;effect_students_3/sample/Normal/sample/concat\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;seed\u0026quot;\\n    value {\\n      i: 0\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;seed2\u0026quot;\\n    value {\\n      i: 0\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_3/sample/Normal/sample/random_normal/mul\u0026quot;\\n  op: \u0026quot;Mul\u0026quot;\\n  input: \u0026quot;effect_students_3/sample/Normal/sample/random_normal/RandomStandardNormal\u0026quot;\\n  input: \u0026quot;effect_students_3/sample/Normal/sample/random_normal/stddev\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_3/sample/Normal/sample/random_normal\u0026quot;\\n  op: \u0026quot;Add\u0026quot;\\n  input: \u0026quot;effect_students_3/sample/Normal/sample/random_normal/mul\u0026quot;\\n  input: \u0026quot;effect_students_3/sample/Normal/sample/random_normal/mean\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_3/sample/Normal/sample/mul\u0026quot;\\n  op: \u0026quot;Mul\u0026quot;\\n  input: \u0026quot;effect_students_3/sample/Normal/sample/random_normal\u0026quot;\\n  input: \u0026quot;Normal/scale\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_3/sample/Normal/sample/add\u0026quot;\\n  op: \u0026quot;Add\u0026quot;\\n  input: \u0026quot;effect_students_3/sample/Normal/sample/mul\u0026quot;\\n  input: \u0026quot;Normal/loc\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_3/sample/Normal/sample/Shape\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 1\\n          }\\n        }\\n        int_val: 2972\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_3/sample/Normal/sample/strided_slice/stack\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 1\\n          }\\n        }\\n        int_val: 1\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_3/sample/Normal/sample/strided_slice/stack_1\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 1\\n          }\\n        }\\n        int_val: 0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_3/sample/Normal/sample/strided_slice/stack_2\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 1\\n          }\\n        }\\n        int_val: 1\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_3/sample/Normal/sample/strided_slice\u0026quot;\\n  op: \u0026quot;StridedSlice\u0026quot;\\n  input: \u0026quot;effect_students_3/sample/Normal/sample/Shape\u0026quot;\\n  input: \u0026quot;effect_students_3/sample/Normal/sample/strided_slice/stack\u0026quot;\\n  input: \u0026quot;effect_students_3/sample/Normal/sample/strided_slice/stack_1\u0026quot;\\n  input: \u0026quot;effect_students_3/sample/Normal/sample/strided_slice/stack_2\u0026quot;\\n  attr {\\n    key: \u0026quot;Index\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;begin_mask\u0026quot;\\n    value {\\n      i: 0\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;ellipsis_mask\u0026quot;\\n    value {\\n      i: 0\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;end_mask\u0026quot;\\n    value {\\n      i: 1\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;new_axis_mask\u0026quot;\\n    value {\\n      i: 0\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;shrink_axis_mask\u0026quot;\\n    value {\\n      i: 0\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_3/sample/Normal/sample/concat_1/axis\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_3/sample/Normal/sample/concat_1\u0026quot;\\n  op: \u0026quot;ConcatV2\u0026quot;\\n  input: \u0026quot;effect_students_3/sample/Const_1\u0026quot;\\n  input: \u0026quot;effect_students_3/sample/Normal/sample/strided_slice\u0026quot;\\n  input: \u0026quot;effect_students_3/sample/Normal/sample/concat_1/axis\u0026quot;\\n  attr {\\n    key: \u0026quot;N\u0026quot;\\n    value {\\n      i: 2\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;Tidx\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_3/sample/Normal/sample/Reshape\u0026quot;\\n  op: \u0026quot;Reshape\u0026quot;\\n  input: \u0026quot;effect_students_3/sample/Normal/sample/add\u0026quot;\\n  input: \u0026quot;effect_students_3/sample/Normal/sample/concat_1\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;Tshape\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_3/sample/Shape\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 2\\n          }\\n        }\\n        tensor_content: \u0026quot;\\\\001\\\\000\\\\000\\\\000\\\\234\\\\013\\\\000\\\\000\u0026quot;\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_3/sample/strided_slice/stack\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 1\\n          }\\n        }\\n        int_val: 1\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_3/sample/strided_slice/stack_1\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 1\\n          }\\n        }\\n        int_val: 0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_3/sample/strided_slice/stack_2\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 1\\n          }\\n        }\\n        int_val: 1\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_3/sample/strided_slice\u0026quot;\\n  op: \u0026quot;StridedSlice\u0026quot;\\n  input: \u0026quot;effect_students_3/sample/Shape\u0026quot;\\n  input: \u0026quot;effect_students_3/sample/strided_slice/stack\u0026quot;\\n  input: \u0026quot;effect_students_3/sample/strided_slice/stack_1\u0026quot;\\n  input: \u0026quot;effect_students_3/sample/strided_slice/stack_2\u0026quot;\\n  attr {\\n    key: \u0026quot;Index\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;begin_mask\u0026quot;\\n    value {\\n      i: 0\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;ellipsis_mask\u0026quot;\\n    value {\\n      i: 0\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;end_mask\u0026quot;\\n    value {\\n      i: 1\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;new_axis_mask\u0026quot;\\n    value {\\n      i: 0\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;shrink_axis_mask\u0026quot;\\n    value {\\n      i: 0\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_3/sample/concat/axis\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_3/sample/concat\u0026quot;\\n  op: \u0026quot;ConcatV2\u0026quot;\\n  input: \u0026quot;effect_students_3/sample/sample_shape\u0026quot;\\n  input: \u0026quot;effect_students_3/sample/strided_slice\u0026quot;\\n  input: \u0026quot;effect_students_3/sample/concat/axis\u0026quot;\\n  attr {\\n    key: \u0026quot;N\u0026quot;\\n    value {\\n      i: 2\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;Tidx\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_3/sample/Reshape\u0026quot;\\n  op: \u0026quot;Reshape\u0026quot;\\n  input: \u0026quot;effect_students_3/sample/Normal/sample/Reshape\u0026quot;\\n  input: \u0026quot;effect_students_3/sample/concat\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;Tshape\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/DistributionShape/get_shape/DistributionShape/get_shape/DistributionShape/get_shape/ndims\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 1\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/DistributionShape/get_shape/DistributionShape/get_shape/sample_ndims\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/DistributionShape/get_shape/zero\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/DistributionShape/get_shape/sample_shape\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n          }\\n        }\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/DistributionShape/get_shape/batch_shape\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n          }\\n        }\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/DistributionShape/get_shape/event_shape\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 1\\n          }\\n        }\\n        int_val: 2972\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/pick_vector/cond\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_BOOL\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_BOOL\\n        tensor_shape {\\n        }\\n        bool_val: false\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/concat/values_0\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 1\\n          }\\n        }\\n        int_val: -1\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/concat/axis\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/concat\u0026quot;\\n  op: \u0026quot;ConcatV2\u0026quot;\\n  input: \u0026quot;effect_students_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/concat/values_0\u0026quot;\\n  input: \u0026quot;effect_students_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/DistributionShape/get_shape/batch_shape\u0026quot;\\n  input: \u0026quot;effect_students_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/DistributionShape/get_shape/event_shape\u0026quot;\\n  input: \u0026quot;effect_students_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/concat/axis\u0026quot;\\n  attr {\\n    key: \u0026quot;N\u0026quot;\\n    value {\\n      i: 3\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;Tidx\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/Reshape\u0026quot;\\n  op: \u0026quot;Reshape\u0026quot;\\n  input: \u0026quot;effect_students_3/sample/Reshape\u0026quot;\\n  input: \u0026quot;effect_students_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/concat\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;Tshape\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/rotate_transpose/shift\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: -1\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/rotate_transpose/assert_integer/statically_determined_was_integer\u0026quot;\\n  op: \u0026quot;NoOp\u0026quot;\\n}\\nnode {\\n  name: \u0026quot;effect_students_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/rotate_transpose/transpose/perm\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 2\\n          }\\n        }\\n        tensor_content: \u0026quot;\\\\001\\\\000\\\\000\\\\000\\\\000\\\\000\\\\000\\\\000\u0026quot;\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/rotate_transpose/transpose\u0026quot;\\n  op: \u0026quot;Transpose\u0026quot;\\n  input: \u0026quot;effect_students_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/Reshape\u0026quot;\\n  input: \u0026quot;effect_students_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/rotate_transpose/transpose/perm\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;Tperm\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_3/sample/affine_linear_operator/forward/LinearOperatorScaledIdentity/matmul/mul\u0026quot;\\n  op: \u0026quot;Mul\u0026quot;\\n  input: \u0026quot;effect_students_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/rotate_transpose/transpose\u0026quot;\\n  input: \u0026quot;effect_students/init/make_diag_scale/LinearOperatorScaledIdentity/ExpandDims_1\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_3/sample/affine_linear_operator/forward/DistributionShape_1/undo_make_batch_of_event_sample_matrices/rotate_transpose/shift\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 1\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_3/sample/affine_linear_operator/forward/DistributionShape_1/undo_make_batch_of_event_sample_matrices/rotate_transpose/assert_integer/statically_determined_was_integer\u0026quot;\\n  op: \u0026quot;NoOp\u0026quot;\\n}\\nnode {\\n  name: \u0026quot;effect_students_3/sample/affine_linear_operator/forward/DistributionShape_1/undo_make_batch_of_event_sample_matrices/rotate_transpose/transpose/perm\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 2\\n          }\\n        }\\n        tensor_content: \u0026quot;\\\\001\\\\000\\\\000\\\\000\\\\000\\\\000\\\\000\\\\000\u0026quot;\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_3/sample/affine_linear_operator/forward/DistributionShape_1/undo_make_batch_of_event_sample_matrices/rotate_transpose/transpose\u0026quot;\\n  op: \u0026quot;Transpose\u0026quot;\\n  input: \u0026quot;effect_students_3/sample/affine_linear_operator/forward/LinearOperatorScaledIdentity/matmul/mul\u0026quot;\\n  input: \u0026quot;effect_students_3/sample/affine_linear_operator/forward/DistributionShape_1/undo_make_batch_of_event_sample_matrices/rotate_transpose/transpose/perm\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;Tperm\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_3/sample/affine_linear_operator/forward/DistributionShape_1/undo_make_batch_of_event_sample_matrices/DistributionShape/get_shape/DistributionShape/get_shape/DistributionShape/get_shape/ndims\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 2\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_3/sample/affine_linear_operator/forward/DistributionShape_1/undo_make_batch_of_event_sample_matrices/DistributionShape/get_shape/DistributionShape/get_shape/sample_ndims\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 1\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_3/sample/affine_linear_operator/forward/DistributionShape_1/undo_make_batch_of_event_sample_matrices/DistributionShape/get_shape/zero\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_3/sample/affine_linear_operator/forward/DistributionShape_1/undo_make_batch_of_event_sample_matrices/DistributionShape/get_shape/sample_shape\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 1\\n          }\\n        }\\n        int_val: 1\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_3/sample/affine_linear_operator/forward/DistributionShape_1/undo_make_batch_of_event_sample_matrices/DistributionShape/get_shape/batch_shape\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n          }\\n        }\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_3/sample/affine_linear_operator/forward/DistributionShape_1/undo_make_batch_of_event_sample_matrices/DistributionShape/get_shape/event_shape\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 1\\n          }\\n        }\\n        int_val: 2972\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_3/sample/affine_linear_operator/forward/DistributionShape_1/undo_make_batch_of_event_sample_matrices/concat/axis\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_3/sample/affine_linear_operator/forward/DistributionShape_1/undo_make_batch_of_event_sample_matrices/concat\u0026quot;\\n  op: \u0026quot;ConcatV2\u0026quot;\\n  input: \u0026quot;effect_students_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/DistributionShape/get_shape/sample_shape\u0026quot;\\n  input: \u0026quot;effect_students_3/sample/affine_linear_operator/forward/DistributionShape_1/undo_make_batch_of_event_sample_matrices/DistributionShape/get_shape/batch_shape\u0026quot;\\n  input: \u0026quot;effect_students_3/sample/affine_linear_operator/forward/DistributionShape_1/undo_make_batch_of_event_sample_matrices/DistributionShape/get_shape/event_shape\u0026quot;\\n  input: \u0026quot;effect_students_3/sample/affine_linear_operator/forward/DistributionShape_1/undo_make_batch_of_event_sample_matrices/concat/axis\u0026quot;\\n  attr {\\n    key: \u0026quot;N\u0026quot;\\n    value {\\n      i: 3\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;Tidx\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_3/sample/affine_linear_operator/forward/DistributionShape_1/undo_make_batch_of_event_sample_matrices/Reshape\u0026quot;\\n  op: \u0026quot;Reshape\u0026quot;\\n  input: \u0026quot;effect_students_3/sample/affine_linear_operator/forward/DistributionShape_1/undo_make_batch_of_event_sample_matrices/rotate_transpose/transpose\u0026quot;\\n  input: \u0026quot;effect_students_3/sample/affine_linear_operator/forward/DistributionShape_1/undo_make_batch_of_event_sample_matrices/concat\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;Tshape\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_students_3/sample/affine_linear_operator/forward/add\u0026quot;\\n  op: \u0026quot;Add\u0026quot;\\n  input: \u0026quot;effect_students_3/sample/affine_linear_operator/forward/DistributionShape_1/undo_make_batch_of_event_sample_matrices/Reshape\u0026quot;\\n  input: \u0026quot;zeros\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;zeros_2/shape_as_tensor\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 1\\n          }\\n        }\\n        int_val: 1128\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;zeros_2/Const\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_FLOAT\\n        tensor_shape {\\n        }\\n        float_val: 0.0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;zeros_2\u0026quot;\\n  op: \u0026quot;Fill\u0026quot;\\n  input: \u0026quot;zeros_2/shape_as_tensor\u0026quot;\\n  input: \u0026quot;zeros_2/Const\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;index_type\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors/init/make_diag_scale/LinearOperatorScaledIdentity/ExpandDims/dim\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: -1\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors/init/make_diag_scale/LinearOperatorScaledIdentity/ExpandDims\u0026quot;\\n  op: \u0026quot;ExpandDims\u0026quot;\\n  input: \u0026quot;Exp_1\u0026quot;\\n  input: \u0026quot;effect_instructors/init/make_diag_scale/LinearOperatorScaledIdentity/ExpandDims/dim\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;Tdim\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors/init/make_diag_scale/LinearOperatorScaledIdentity/ExpandDims_1/dim\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: -1\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors/init/make_diag_scale/LinearOperatorScaledIdentity/ExpandDims_1\u0026quot;\\n  op: \u0026quot;ExpandDims\u0026quot;\\n  input: \u0026quot;effect_instructors/init/make_diag_scale/LinearOperatorScaledIdentity/ExpandDims\u0026quot;\\n  input: \u0026quot;effect_instructors/init/make_diag_scale/LinearOperatorScaledIdentity/ExpandDims_1/dim\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;Tdim\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors/init/make_diag_scale/LinearOperatorScaledIdentity/Abs\u0026quot;\\n  op: \u0026quot;Abs\u0026quot;\\n  input: \u0026quot;Exp_1\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors/init/make_diag_scale/LinearOperatorScaledIdentity/num_rows\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 1128\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors/init/make_diag_scale/LinearOperatorScaledIdentity/Cast\u0026quot;\\n  op: \u0026quot;Cast\u0026quot;\\n  input: \u0026quot;effect_instructors/init/make_diag_scale/LinearOperatorScaledIdentity/num_rows\u0026quot;\\n  attr {\\n    key: \u0026quot;DstT\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;SrcT\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors/init/make_diag_scale/LinearOperatorScaledIdentity/Cast_1\u0026quot;\\n  op: \u0026quot;Cast\u0026quot;\\n  input: \u0026quot;effect_instructors/init/make_diag_scale/LinearOperatorScaledIdentity/num_rows\u0026quot;\\n  attr {\\n    key: \u0026quot;DstT\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;SrcT\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_1/shapes_from_loc_and_scale/LinearOperatorScaledIdentity/range_dimension_tensor/Const\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 1128\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_1/shapes_from_loc_and_scale/LinearOperatorScaledIdentity_1/batch_shape_tensor/batch_shape\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n          }\\n        }\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_1/shapes_from_loc_and_scale/loc_batch_shape\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n          }\\n        }\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;zeros_3\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_FLOAT\\n        tensor_shape {\\n        }\\n        float_val: 0.0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;ones_1\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_FLOAT\\n        tensor_shape {\\n        }\\n        float_val: 1.0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;Normal_1/loc\u0026quot;\\n  op: \u0026quot;Identity\u0026quot;\\n  input: \u0026quot;zeros_3\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;Normal_1/scale\u0026quot;\\n  op: \u0026quot;Identity\u0026quot;\\n  input: \u0026quot;ones_1\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;affine_linear_operator_1/init/event_ndims\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 1\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;affine_linear_operator_1/init/DistributionShape/init/batch_ndims\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;affine_linear_operator_1/init/DistributionShape/init/event_ndims\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 1\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;affine_linear_operator_1/init/Const\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 1\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_2/zero\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_2/empty\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n          }\\n        }\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_2/Normal/is_scalar_batch/is_scalar_batch\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_BOOL\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_BOOL\\n        tensor_shape {\\n        }\\n        bool_val: true\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_2/batch_shape\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n          }\\n        }\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_2/Const\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_2/Const_1\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_2/Const_2\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_BOOL\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_BOOL\\n        tensor_shape {\\n        }\\n        bool_val: true\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_2/Const_3\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_2/Const_4\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_BOOL\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_BOOL\\n        tensor_shape {\\n        }\\n        bool_val: true\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_2/Const_5\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_BOOL\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_BOOL\\n        tensor_shape {\\n        }\\n        bool_val: false\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_2/Normal_1/is_scalar_event/is_scalar_event\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_BOOL\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_BOOL\\n        tensor_shape {\\n        }\\n        bool_val: true\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_2/event_shape\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 1\\n          }\\n        }\\n        int_val: 1128\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_2/Const_6\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 1\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_2/Const_7\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_2/Const_8\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_BOOL\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_BOOL\\n        tensor_shape {\\n        }\\n        bool_val: false\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_2/Const_9\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_BOOL\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_BOOL\\n        tensor_shape {\\n        }\\n        bool_val: false\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_2/Const_10\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_BOOL\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_BOOL\\n        tensor_shape {\\n        }\\n        bool_val: true\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_2/Const_11\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_BOOL\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_BOOL\\n        tensor_shape {\\n        }\\n        bool_val: false\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_2/Const_12\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 1\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_2/Const_13\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_BOOL\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_BOOL\\n        tensor_shape {\\n        }\\n        bool_val: false\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_2/Const_14\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_BOOL\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_BOOL\\n        tensor_shape {\\n        }\\n        bool_val: true\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_2/Const_15\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_BOOL\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_BOOL\\n        tensor_shape {\\n        }\\n        bool_val: true\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_2/Normal_2/is_scalar_batch/is_scalar_batch\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_BOOL\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_BOOL\\n        tensor_shape {\\n        }\\n        bool_val: true\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_2/Const_16\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_BOOL\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_BOOL\\n        tensor_shape {\\n        }\\n        bool_val: false\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_2/Const_17\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_BOOL\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_BOOL\\n        tensor_shape {\\n        }\\n        bool_val: false\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_2/Const_18\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 1\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_2/sub/x\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_2/sub\u0026quot;\\n  op: \u0026quot;Sub\u0026quot;\\n  input: \u0026quot;effect_instructors_2/sub/x\u0026quot;\\n  input: \u0026quot;effect_instructors_2/Const_18\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_2/range/limit\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_2/range/delta\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 1\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_2/range\u0026quot;\\n  op: \u0026quot;Range\u0026quot;\\n  input: \u0026quot;effect_instructors_2/sub\u0026quot;\\n  input: \u0026quot;effect_instructors_2/range/limit\u0026quot;\\n  input: \u0026quot;effect_instructors_2/range/delta\u0026quot;\\n  attr {\\n    key: \u0026quot;Tidx\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_3/sample/sample_shape\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n          }\\n        }\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_3/sample/Const\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 1\\n          }\\n        }\\n        int_val: 1\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_3/sample/Const_1\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 2\\n          }\\n        }\\n        tensor_content: \u0026quot;\\\\001\\\\000\\\\000\\\\000h\\\\004\\\\000\\\\000\u0026quot;\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_3/sample/Normal/sample/Normal/batch_shape_tensor/batch_shape\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n          }\\n        }\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_3/sample/Normal/sample/concat/values_0\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 1\\n          }\\n        }\\n        int_val: 1128\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_3/sample/Normal/sample/concat/axis\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_3/sample/Normal/sample/concat\u0026quot;\\n  op: \u0026quot;ConcatV2\u0026quot;\\n  input: \u0026quot;effect_instructors_3/sample/Normal/sample/concat/values_0\u0026quot;\\n  input: \u0026quot;effect_instructors_3/sample/Normal/sample/Normal/batch_shape_tensor/batch_shape\u0026quot;\\n  input: \u0026quot;effect_instructors_3/sample/Normal/sample/concat/axis\u0026quot;\\n  attr {\\n    key: \u0026quot;N\u0026quot;\\n    value {\\n      i: 2\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;Tidx\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_3/sample/Normal/sample/random_normal/mean\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_FLOAT\\n        tensor_shape {\\n        }\\n        float_val: 0.0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_3/sample/Normal/sample/random_normal/stddev\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_FLOAT\\n        tensor_shape {\\n        }\\n        float_val: 1.0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_3/sample/Normal/sample/random_normal/RandomStandardNormal\u0026quot;\\n  op: \u0026quot;RandomStandardNormal\u0026quot;\\n  input: \u0026quot;effect_instructors_3/sample/Normal/sample/concat\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;seed\u0026quot;\\n    value {\\n      i: 0\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;seed2\u0026quot;\\n    value {\\n      i: 0\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_3/sample/Normal/sample/random_normal/mul\u0026quot;\\n  op: \u0026quot;Mul\u0026quot;\\n  input: \u0026quot;effect_instructors_3/sample/Normal/sample/random_normal/RandomStandardNormal\u0026quot;\\n  input: \u0026quot;effect_instructors_3/sample/Normal/sample/random_normal/stddev\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_3/sample/Normal/sample/random_normal\u0026quot;\\n  op: \u0026quot;Add\u0026quot;\\n  input: \u0026quot;effect_instructors_3/sample/Normal/sample/random_normal/mul\u0026quot;\\n  input: \u0026quot;effect_instructors_3/sample/Normal/sample/random_normal/mean\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_3/sample/Normal/sample/mul\u0026quot;\\n  op: \u0026quot;Mul\u0026quot;\\n  input: \u0026quot;effect_instructors_3/sample/Normal/sample/random_normal\u0026quot;\\n  input: \u0026quot;Normal_1/scale\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_3/sample/Normal/sample/add\u0026quot;\\n  op: \u0026quot;Add\u0026quot;\\n  input: \u0026quot;effect_instructors_3/sample/Normal/sample/mul\u0026quot;\\n  input: \u0026quot;Normal_1/loc\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_3/sample/Normal/sample/Shape\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 1\\n          }\\n        }\\n        int_val: 1128\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_3/sample/Normal/sample/strided_slice/stack\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 1\\n          }\\n        }\\n        int_val: 1\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_3/sample/Normal/sample/strided_slice/stack_1\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 1\\n          }\\n        }\\n        int_val: 0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_3/sample/Normal/sample/strided_slice/stack_2\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 1\\n          }\\n        }\\n        int_val: 1\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_3/sample/Normal/sample/strided_slice\u0026quot;\\n  op: \u0026quot;StridedSlice\u0026quot;\\n  input: \u0026quot;effect_instructors_3/sample/Normal/sample/Shape\u0026quot;\\n  input: \u0026quot;effect_instructors_3/sample/Normal/sample/strided_slice/stack\u0026quot;\\n  input: \u0026quot;effect_instructors_3/sample/Normal/sample/strided_slice/stack_1\u0026quot;\\n  input: \u0026quot;effect_instructors_3/sample/Normal/sample/strided_slice/stack_2\u0026quot;\\n  attr {\\n    key: \u0026quot;Index\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;begin_mask\u0026quot;\\n    value {\\n      i: 0\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;ellipsis_mask\u0026quot;\\n    value {\\n      i: 0\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;end_mask\u0026quot;\\n    value {\\n      i: 1\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;new_axis_mask\u0026quot;\\n    value {\\n      i: 0\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;shrink_axis_mask\u0026quot;\\n    value {\\n      i: 0\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_3/sample/Normal/sample/concat_1/axis\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_3/sample/Normal/sample/concat_1\u0026quot;\\n  op: \u0026quot;ConcatV2\u0026quot;\\n  input: \u0026quot;effect_instructors_3/sample/Const_1\u0026quot;\\n  input: \u0026quot;effect_instructors_3/sample/Normal/sample/strided_slice\u0026quot;\\n  input: \u0026quot;effect_instructors_3/sample/Normal/sample/concat_1/axis\u0026quot;\\n  attr {\\n    key: \u0026quot;N\u0026quot;\\n    value {\\n      i: 2\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;Tidx\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_3/sample/Normal/sample/Reshape\u0026quot;\\n  op: \u0026quot;Reshape\u0026quot;\\n  input: \u0026quot;effect_instructors_3/sample/Normal/sample/add\u0026quot;\\n  input: \u0026quot;effect_instructors_3/sample/Normal/sample/concat_1\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;Tshape\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_3/sample/Shape\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 2\\n          }\\n        }\\n        tensor_content: \u0026quot;\\\\001\\\\000\\\\000\\\\000h\\\\004\\\\000\\\\000\u0026quot;\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_3/sample/strided_slice/stack\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 1\\n          }\\n        }\\n        int_val: 1\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_3/sample/strided_slice/stack_1\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 1\\n          }\\n        }\\n        int_val: 0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_3/sample/strided_slice/stack_2\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 1\\n          }\\n        }\\n        int_val: 1\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_3/sample/strided_slice\u0026quot;\\n  op: \u0026quot;StridedSlice\u0026quot;\\n  input: \u0026quot;effect_instructors_3/sample/Shape\u0026quot;\\n  input: \u0026quot;effect_instructors_3/sample/strided_slice/stack\u0026quot;\\n  input: \u0026quot;effect_instructors_3/sample/strided_slice/stack_1\u0026quot;\\n  input: \u0026quot;effect_instructors_3/sample/strided_slice/stack_2\u0026quot;\\n  attr {\\n    key: \u0026quot;Index\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;begin_mask\u0026quot;\\n    value {\\n      i: 0\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;ellipsis_mask\u0026quot;\\n    value {\\n      i: 0\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;end_mask\u0026quot;\\n    value {\\n      i: 1\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;new_axis_mask\u0026quot;\\n    value {\\n      i: 0\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;shrink_axis_mask\u0026quot;\\n    value {\\n      i: 0\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_3/sample/concat/axis\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_3/sample/concat\u0026quot;\\n  op: \u0026quot;ConcatV2\u0026quot;\\n  input: \u0026quot;effect_instructors_3/sample/sample_shape\u0026quot;\\n  input: \u0026quot;effect_instructors_3/sample/strided_slice\u0026quot;\\n  input: \u0026quot;effect_instructors_3/sample/concat/axis\u0026quot;\\n  attr {\\n    key: \u0026quot;N\u0026quot;\\n    value {\\n      i: 2\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;Tidx\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_3/sample/Reshape\u0026quot;\\n  op: \u0026quot;Reshape\u0026quot;\\n  input: \u0026quot;effect_instructors_3/sample/Normal/sample/Reshape\u0026quot;\\n  input: \u0026quot;effect_instructors_3/sample/concat\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;Tshape\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/DistributionShape/get_shape/DistributionShape/get_shape/DistributionShape/get_shape/ndims\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 1\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/DistributionShape/get_shape/DistributionShape/get_shape/sample_ndims\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/DistributionShape/get_shape/zero\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/DistributionShape/get_shape/sample_shape\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n          }\\n        }\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/DistributionShape/get_shape/batch_shape\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n          }\\n        }\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/DistributionShape/get_shape/event_shape\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 1\\n          }\\n        }\\n        int_val: 1128\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/pick_vector/cond\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_BOOL\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_BOOL\\n        tensor_shape {\\n        }\\n        bool_val: false\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/concat/values_0\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 1\\n          }\\n        }\\n        int_val: -1\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/concat/axis\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/concat\u0026quot;\\n  op: \u0026quot;ConcatV2\u0026quot;\\n  input: \u0026quot;effect_instructors_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/concat/values_0\u0026quot;\\n  input: \u0026quot;effect_instructors_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/DistributionShape/get_shape/batch_shape\u0026quot;\\n  input: \u0026quot;effect_instructors_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/DistributionShape/get_shape/event_shape\u0026quot;\\n  input: \u0026quot;effect_instructors_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/concat/axis\u0026quot;\\n  attr {\\n    key: \u0026quot;N\u0026quot;\\n    value {\\n      i: 3\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;Tidx\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/Reshape\u0026quot;\\n  op: \u0026quot;Reshape\u0026quot;\\n  input: \u0026quot;effect_instructors_3/sample/Reshape\u0026quot;\\n  input: \u0026quot;effect_instructors_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/concat\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;Tshape\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/rotate_transpose/shift\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: -1\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/rotate_transpose/assert_integer/statically_determined_was_integer\u0026quot;\\n  op: \u0026quot;NoOp\u0026quot;\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/rotate_transpose/transpose/perm\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 2\\n          }\\n        }\\n        tensor_content: \u0026quot;\\\\001\\\\000\\\\000\\\\000\\\\000\\\\000\\\\000\\\\000\u0026quot;\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/rotate_transpose/transpose\u0026quot;\\n  op: \u0026quot;Transpose\u0026quot;\\n  input: \u0026quot;effect_instructors_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/Reshape\u0026quot;\\n  input: \u0026quot;effect_instructors_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/rotate_transpose/transpose/perm\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;Tperm\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_3/sample/affine_linear_operator/forward/LinearOperatorScaledIdentity/matmul/mul\u0026quot;\\n  op: \u0026quot;Mul\u0026quot;\\n  input: \u0026quot;effect_instructors_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/rotate_transpose/transpose\u0026quot;\\n  input: \u0026quot;effect_instructors/init/make_diag_scale/LinearOperatorScaledIdentity/ExpandDims_1\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_3/sample/affine_linear_operator/forward/DistributionShape_1/undo_make_batch_of_event_sample_matrices/rotate_transpose/shift\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 1\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_3/sample/affine_linear_operator/forward/DistributionShape_1/undo_make_batch_of_event_sample_matrices/rotate_transpose/assert_integer/statically_determined_was_integer\u0026quot;\\n  op: \u0026quot;NoOp\u0026quot;\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_3/sample/affine_linear_operator/forward/DistributionShape_1/undo_make_batch_of_event_sample_matrices/rotate_transpose/transpose/perm\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 2\\n          }\\n        }\\n        tensor_content: \u0026quot;\\\\001\\\\000\\\\000\\\\000\\\\000\\\\000\\\\000\\\\000\u0026quot;\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_3/sample/affine_linear_operator/forward/DistributionShape_1/undo_make_batch_of_event_sample_matrices/rotate_transpose/transpose\u0026quot;\\n  op: \u0026quot;Transpose\u0026quot;\\n  input: \u0026quot;effect_instructors_3/sample/affine_linear_operator/forward/LinearOperatorScaledIdentity/matmul/mul\u0026quot;\\n  input: \u0026quot;effect_instructors_3/sample/affine_linear_operator/forward/DistributionShape_1/undo_make_batch_of_event_sample_matrices/rotate_transpose/transpose/perm\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;Tperm\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_3/sample/affine_linear_operator/forward/DistributionShape_1/undo_make_batch_of_event_sample_matrices/DistributionShape/get_shape/DistributionShape/get_shape/DistributionShape/get_shape/ndims\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 2\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_3/sample/affine_linear_operator/forward/DistributionShape_1/undo_make_batch_of_event_sample_matrices/DistributionShape/get_shape/DistributionShape/get_shape/sample_ndims\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 1\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_3/sample/affine_linear_operator/forward/DistributionShape_1/undo_make_batch_of_event_sample_matrices/DistributionShape/get_shape/zero\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_3/sample/affine_linear_operator/forward/DistributionShape_1/undo_make_batch_of_event_sample_matrices/DistributionShape/get_shape/sample_shape\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 1\\n          }\\n        }\\n        int_val: 1\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_3/sample/affine_linear_operator/forward/DistributionShape_1/undo_make_batch_of_event_sample_matrices/DistributionShape/get_shape/batch_shape\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n          }\\n        }\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_3/sample/affine_linear_operator/forward/DistributionShape_1/undo_make_batch_of_event_sample_matrices/DistributionShape/get_shape/event_shape\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 1\\n          }\\n        }\\n        int_val: 1128\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_3/sample/affine_linear_operator/forward/DistributionShape_1/undo_make_batch_of_event_sample_matrices/concat/axis\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_3/sample/affine_linear_operator/forward/DistributionShape_1/undo_make_batch_of_event_sample_matrices/concat\u0026quot;\\n  op: \u0026quot;ConcatV2\u0026quot;\\n  input: \u0026quot;effect_instructors_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/DistributionShape/get_shape/sample_shape\u0026quot;\\n  input: \u0026quot;effect_instructors_3/sample/affine_linear_operator/forward/DistributionShape_1/undo_make_batch_of_event_sample_matrices/DistributionShape/get_shape/batch_shape\u0026quot;\\n  input: \u0026quot;effect_instructors_3/sample/affine_linear_operator/forward/DistributionShape_1/undo_make_batch_of_event_sample_matrices/DistributionShape/get_shape/event_shape\u0026quot;\\n  input: \u0026quot;effect_instructors_3/sample/affine_linear_operator/forward/DistributionShape_1/undo_make_batch_of_event_sample_matrices/concat/axis\u0026quot;\\n  attr {\\n    key: \u0026quot;N\u0026quot;\\n    value {\\n      i: 3\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;Tidx\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_3/sample/affine_linear_operator/forward/DistributionShape_1/undo_make_batch_of_event_sample_matrices/Reshape\u0026quot;\\n  op: \u0026quot;Reshape\u0026quot;\\n  input: \u0026quot;effect_instructors_3/sample/affine_linear_operator/forward/DistributionShape_1/undo_make_batch_of_event_sample_matrices/rotate_transpose/transpose\u0026quot;\\n  input: \u0026quot;effect_instructors_3/sample/affine_linear_operator/forward/DistributionShape_1/undo_make_batch_of_event_sample_matrices/concat\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;Tshape\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_instructors_3/sample/affine_linear_operator/forward/add\u0026quot;\\n  op: \u0026quot;Add\u0026quot;\\n  input: \u0026quot;effect_instructors_3/sample/affine_linear_operator/forward/DistributionShape_1/undo_make_batch_of_event_sample_matrices/Reshape\u0026quot;\\n  input: \u0026quot;zeros_2\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;zeros_4/shape_as_tensor\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 1\\n          }\\n        }\\n        int_val: 14\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;zeros_4/Const\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_FLOAT\\n        tensor_shape {\\n        }\\n        float_val: 0.0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;zeros_4\u0026quot;\\n  op: \u0026quot;Fill\u0026quot;\\n  input: \u0026quot;zeros_4/shape_as_tensor\u0026quot;\\n  input: \u0026quot;zeros_4/Const\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;index_type\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments/init/make_diag_scale/LinearOperatorScaledIdentity/ExpandDims/dim\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: -1\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments/init/make_diag_scale/LinearOperatorScaledIdentity/ExpandDims\u0026quot;\\n  op: \u0026quot;ExpandDims\u0026quot;\\n  input: \u0026quot;Exp_2\u0026quot;\\n  input: \u0026quot;effect_departments/init/make_diag_scale/LinearOperatorScaledIdentity/ExpandDims/dim\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;Tdim\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments/init/make_diag_scale/LinearOperatorScaledIdentity/ExpandDims_1/dim\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: -1\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments/init/make_diag_scale/LinearOperatorScaledIdentity/ExpandDims_1\u0026quot;\\n  op: \u0026quot;ExpandDims\u0026quot;\\n  input: \u0026quot;effect_departments/init/make_diag_scale/LinearOperatorScaledIdentity/ExpandDims\u0026quot;\\n  input: \u0026quot;effect_departments/init/make_diag_scale/LinearOperatorScaledIdentity/ExpandDims_1/dim\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;Tdim\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments/init/make_diag_scale/LinearOperatorScaledIdentity/Abs\u0026quot;\\n  op: \u0026quot;Abs\u0026quot;\\n  input: \u0026quot;Exp_2\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments/init/make_diag_scale/LinearOperatorScaledIdentity/num_rows\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 14\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments/init/make_diag_scale/LinearOperatorScaledIdentity/Cast\u0026quot;\\n  op: \u0026quot;Cast\u0026quot;\\n  input: \u0026quot;effect_departments/init/make_diag_scale/LinearOperatorScaledIdentity/num_rows\u0026quot;\\n  attr {\\n    key: \u0026quot;DstT\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;SrcT\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments/init/make_diag_scale/LinearOperatorScaledIdentity/Cast_1\u0026quot;\\n  op: \u0026quot;Cast\u0026quot;\\n  input: \u0026quot;effect_departments/init/make_diag_scale/LinearOperatorScaledIdentity/num_rows\u0026quot;\\n  attr {\\n    key: \u0026quot;DstT\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;SrcT\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_1/shapes_from_loc_and_scale/LinearOperatorScaledIdentity/range_dimension_tensor/Const\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 14\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_1/shapes_from_loc_and_scale/LinearOperatorScaledIdentity_1/batch_shape_tensor/batch_shape\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n          }\\n        }\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_1/shapes_from_loc_and_scale/loc_batch_shape\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n          }\\n        }\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;zeros_5\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_FLOAT\\n        tensor_shape {\\n        }\\n        float_val: 0.0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;ones_2\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_FLOAT\\n        tensor_shape {\\n        }\\n        float_val: 1.0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;Normal_2/loc\u0026quot;\\n  op: \u0026quot;Identity\u0026quot;\\n  input: \u0026quot;zeros_5\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;Normal_2/scale\u0026quot;\\n  op: \u0026quot;Identity\u0026quot;\\n  input: \u0026quot;ones_2\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;affine_linear_operator_2/init/event_ndims\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 1\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;affine_linear_operator_2/init/DistributionShape/init/batch_ndims\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;affine_linear_operator_2/init/DistributionShape/init/event_ndims\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 1\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;affine_linear_operator_2/init/Const\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 1\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_2/zero\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_2/empty\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n          }\\n        }\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_2/Normal/is_scalar_batch/is_scalar_batch\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_BOOL\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_BOOL\\n        tensor_shape {\\n        }\\n        bool_val: true\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_2/batch_shape\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n          }\\n        }\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_2/Const\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_2/Const_1\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_2/Const_2\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_BOOL\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_BOOL\\n        tensor_shape {\\n        }\\n        bool_val: true\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_2/Const_3\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_2/Const_4\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_BOOL\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_BOOL\\n        tensor_shape {\\n        }\\n        bool_val: true\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_2/Const_5\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_BOOL\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_BOOL\\n        tensor_shape {\\n        }\\n        bool_val: false\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_2/Normal_1/is_scalar_event/is_scalar_event\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_BOOL\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_BOOL\\n        tensor_shape {\\n        }\\n        bool_val: true\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_2/event_shape\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 1\\n          }\\n        }\\n        int_val: 14\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_2/Const_6\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 1\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_2/Const_7\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_2/Const_8\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_BOOL\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_BOOL\\n        tensor_shape {\\n        }\\n        bool_val: false\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_2/Const_9\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_BOOL\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_BOOL\\n        tensor_shape {\\n        }\\n        bool_val: false\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_2/Const_10\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_BOOL\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_BOOL\\n        tensor_shape {\\n        }\\n        bool_val: true\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_2/Const_11\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_BOOL\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_BOOL\\n        tensor_shape {\\n        }\\n        bool_val: false\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_2/Const_12\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 1\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_2/Const_13\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_BOOL\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_BOOL\\n        tensor_shape {\\n        }\\n        bool_val: false\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_2/Const_14\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_BOOL\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_BOOL\\n        tensor_shape {\\n        }\\n        bool_val: true\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_2/Const_15\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_BOOL\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_BOOL\\n        tensor_shape {\\n        }\\n        bool_val: true\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_2/Normal_2/is_scalar_batch/is_scalar_batch\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_BOOL\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_BOOL\\n        tensor_shape {\\n        }\\n        bool_val: true\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_2/Const_16\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_BOOL\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_BOOL\\n        tensor_shape {\\n        }\\n        bool_val: false\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_2/Const_17\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_BOOL\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_BOOL\\n        tensor_shape {\\n        }\\n        bool_val: false\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_2/Const_18\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 1\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_2/sub/x\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_2/sub\u0026quot;\\n  op: \u0026quot;Sub\u0026quot;\\n  input: \u0026quot;effect_departments_2/sub/x\u0026quot;\\n  input: \u0026quot;effect_departments_2/Const_18\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_2/range/limit\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_2/range/delta\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 1\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_2/range\u0026quot;\\n  op: \u0026quot;Range\u0026quot;\\n  input: \u0026quot;effect_departments_2/sub\u0026quot;\\n  input: \u0026quot;effect_departments_2/range/limit\u0026quot;\\n  input: \u0026quot;effect_departments_2/range/delta\u0026quot;\\n  attr {\\n    key: \u0026quot;Tidx\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_3/sample/sample_shape\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n          }\\n        }\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_3/sample/Const\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 1\\n          }\\n        }\\n        int_val: 1\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_3/sample/Const_1\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 2\\n          }\\n        }\\n        tensor_content: \u0026quot;\\\\001\\\\000\\\\000\\\\000\\\\016\\\\000\\\\000\\\\000\u0026quot;\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_3/sample/Normal/sample/Normal/batch_shape_tensor/batch_shape\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n          }\\n        }\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_3/sample/Normal/sample/concat/values_0\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 1\\n          }\\n        }\\n        int_val: 14\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_3/sample/Normal/sample/concat/axis\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_3/sample/Normal/sample/concat\u0026quot;\\n  op: \u0026quot;ConcatV2\u0026quot;\\n  input: \u0026quot;effect_departments_3/sample/Normal/sample/concat/values_0\u0026quot;\\n  input: \u0026quot;effect_departments_3/sample/Normal/sample/Normal/batch_shape_tensor/batch_shape\u0026quot;\\n  input: \u0026quot;effect_departments_3/sample/Normal/sample/concat/axis\u0026quot;\\n  attr {\\n    key: \u0026quot;N\u0026quot;\\n    value {\\n      i: 2\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;Tidx\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_3/sample/Normal/sample/random_normal/mean\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_FLOAT\\n        tensor_shape {\\n        }\\n        float_val: 0.0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_3/sample/Normal/sample/random_normal/stddev\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_FLOAT\\n        tensor_shape {\\n        }\\n        float_val: 1.0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_3/sample/Normal/sample/random_normal/RandomStandardNormal\u0026quot;\\n  op: \u0026quot;RandomStandardNormal\u0026quot;\\n  input: \u0026quot;effect_departments_3/sample/Normal/sample/concat\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;seed\u0026quot;\\n    value {\\n      i: 0\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;seed2\u0026quot;\\n    value {\\n      i: 0\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_3/sample/Normal/sample/random_normal/mul\u0026quot;\\n  op: \u0026quot;Mul\u0026quot;\\n  input: \u0026quot;effect_departments_3/sample/Normal/sample/random_normal/RandomStandardNormal\u0026quot;\\n  input: \u0026quot;effect_departments_3/sample/Normal/sample/random_normal/stddev\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_3/sample/Normal/sample/random_normal\u0026quot;\\n  op: \u0026quot;Add\u0026quot;\\n  input: \u0026quot;effect_departments_3/sample/Normal/sample/random_normal/mul\u0026quot;\\n  input: \u0026quot;effect_departments_3/sample/Normal/sample/random_normal/mean\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_3/sample/Normal/sample/mul\u0026quot;\\n  op: \u0026quot;Mul\u0026quot;\\n  input: \u0026quot;effect_departments_3/sample/Normal/sample/random_normal\u0026quot;\\n  input: \u0026quot;Normal_2/scale\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_3/sample/Normal/sample/add\u0026quot;\\n  op: \u0026quot;Add\u0026quot;\\n  input: \u0026quot;effect_departments_3/sample/Normal/sample/mul\u0026quot;\\n  input: \u0026quot;Normal_2/loc\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_3/sample/Normal/sample/Shape\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 1\\n          }\\n        }\\n        int_val: 14\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_3/sample/Normal/sample/strided_slice/stack\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 1\\n          }\\n        }\\n        int_val: 1\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_3/sample/Normal/sample/strided_slice/stack_1\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 1\\n          }\\n        }\\n        int_val: 0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_3/sample/Normal/sample/strided_slice/stack_2\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 1\\n          }\\n        }\\n        int_val: 1\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_3/sample/Normal/sample/strided_slice\u0026quot;\\n  op: \u0026quot;StridedSlice\u0026quot;\\n  input: \u0026quot;effect_departments_3/sample/Normal/sample/Shape\u0026quot;\\n  input: \u0026quot;effect_departments_3/sample/Normal/sample/strided_slice/stack\u0026quot;\\n  input: \u0026quot;effect_departments_3/sample/Normal/sample/strided_slice/stack_1\u0026quot;\\n  input: \u0026quot;effect_departments_3/sample/Normal/sample/strided_slice/stack_2\u0026quot;\\n  attr {\\n    key: \u0026quot;Index\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;begin_mask\u0026quot;\\n    value {\\n      i: 0\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;ellipsis_mask\u0026quot;\\n    value {\\n      i: 0\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;end_mask\u0026quot;\\n    value {\\n      i: 1\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;new_axis_mask\u0026quot;\\n    value {\\n      i: 0\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;shrink_axis_mask\u0026quot;\\n    value {\\n      i: 0\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_3/sample/Normal/sample/concat_1/axis\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_3/sample/Normal/sample/concat_1\u0026quot;\\n  op: \u0026quot;ConcatV2\u0026quot;\\n  input: \u0026quot;effect_departments_3/sample/Const_1\u0026quot;\\n  input: \u0026quot;effect_departments_3/sample/Normal/sample/strided_slice\u0026quot;\\n  input: \u0026quot;effect_departments_3/sample/Normal/sample/concat_1/axis\u0026quot;\\n  attr {\\n    key: \u0026quot;N\u0026quot;\\n    value {\\n      i: 2\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;Tidx\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_3/sample/Normal/sample/Reshape\u0026quot;\\n  op: \u0026quot;Reshape\u0026quot;\\n  input: \u0026quot;effect_departments_3/sample/Normal/sample/add\u0026quot;\\n  input: \u0026quot;effect_departments_3/sample/Normal/sample/concat_1\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;Tshape\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_3/sample/Shape\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 2\\n          }\\n        }\\n        tensor_content: \u0026quot;\\\\001\\\\000\\\\000\\\\000\\\\016\\\\000\\\\000\\\\000\u0026quot;\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_3/sample/strided_slice/stack\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 1\\n          }\\n        }\\n        int_val: 1\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_3/sample/strided_slice/stack_1\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 1\\n          }\\n        }\\n        int_val: 0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_3/sample/strided_slice/stack_2\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 1\\n          }\\n        }\\n        int_val: 1\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_3/sample/strided_slice\u0026quot;\\n  op: \u0026quot;StridedSlice\u0026quot;\\n  input: \u0026quot;effect_departments_3/sample/Shape\u0026quot;\\n  input: \u0026quot;effect_departments_3/sample/strided_slice/stack\u0026quot;\\n  input: \u0026quot;effect_departments_3/sample/strided_slice/stack_1\u0026quot;\\n  input: \u0026quot;effect_departments_3/sample/strided_slice/stack_2\u0026quot;\\n  attr {\\n    key: \u0026quot;Index\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;begin_mask\u0026quot;\\n    value {\\n      i: 0\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;ellipsis_mask\u0026quot;\\n    value {\\n      i: 0\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;end_mask\u0026quot;\\n    value {\\n      i: 1\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;new_axis_mask\u0026quot;\\n    value {\\n      i: 0\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;shrink_axis_mask\u0026quot;\\n    value {\\n      i: 0\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_3/sample/concat/axis\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_3/sample/concat\u0026quot;\\n  op: \u0026quot;ConcatV2\u0026quot;\\n  input: \u0026quot;effect_departments_3/sample/sample_shape\u0026quot;\\n  input: \u0026quot;effect_departments_3/sample/strided_slice\u0026quot;\\n  input: \u0026quot;effect_departments_3/sample/concat/axis\u0026quot;\\n  attr {\\n    key: \u0026quot;N\u0026quot;\\n    value {\\n      i: 2\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;Tidx\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_3/sample/Reshape\u0026quot;\\n  op: \u0026quot;Reshape\u0026quot;\\n  input: \u0026quot;effect_departments_3/sample/Normal/sample/Reshape\u0026quot;\\n  input: \u0026quot;effect_departments_3/sample/concat\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;Tshape\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/DistributionShape/get_shape/DistributionShape/get_shape/DistributionShape/get_shape/ndims\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 1\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/DistributionShape/get_shape/DistributionShape/get_shape/sample_ndims\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/DistributionShape/get_shape/zero\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/DistributionShape/get_shape/sample_shape\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n          }\\n        }\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/DistributionShape/get_shape/batch_shape\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n          }\\n        }\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/DistributionShape/get_shape/event_shape\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 1\\n          }\\n        }\\n        int_val: 14\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/pick_vector/cond\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_BOOL\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_BOOL\\n        tensor_shape {\\n        }\\n        bool_val: false\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/concat/values_0\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 1\\n          }\\n        }\\n        int_val: -1\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/concat/axis\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/concat\u0026quot;\\n  op: \u0026quot;ConcatV2\u0026quot;\\n  input: \u0026quot;effect_departments_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/concat/values_0\u0026quot;\\n  input: \u0026quot;effect_departments_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/DistributionShape/get_shape/batch_shape\u0026quot;\\n  input: \u0026quot;effect_departments_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/DistributionShape/get_shape/event_shape\u0026quot;\\n  input: \u0026quot;effect_departments_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/concat/axis\u0026quot;\\n  attr {\\n    key: \u0026quot;N\u0026quot;\\n    value {\\n      i: 3\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;Tidx\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/Reshape\u0026quot;\\n  op: \u0026quot;Reshape\u0026quot;\\n  input: \u0026quot;effect_departments_3/sample/Reshape\u0026quot;\\n  input: \u0026quot;effect_departments_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/concat\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;Tshape\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/rotate_transpose/shift\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: -1\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/rotate_transpose/assert_integer/statically_determined_was_integer\u0026quot;\\n  op: \u0026quot;NoOp\u0026quot;\\n}\\nnode {\\n  name: \u0026quot;effect_departments_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/rotate_transpose/transpose/perm\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 2\\n          }\\n        }\\n        tensor_content: \u0026quot;\\\\001\\\\000\\\\000\\\\000\\\\000\\\\000\\\\000\\\\000\u0026quot;\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/rotate_transpose/transpose\u0026quot;\\n  op: \u0026quot;Transpose\u0026quot;\\n  input: \u0026quot;effect_departments_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/Reshape\u0026quot;\\n  input: \u0026quot;effect_departments_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/rotate_transpose/transpose/perm\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;Tperm\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_3/sample/affine_linear_operator/forward/LinearOperatorScaledIdentity/matmul/mul\u0026quot;\\n  op: \u0026quot;Mul\u0026quot;\\n  input: \u0026quot;effect_departments_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/rotate_transpose/transpose\u0026quot;\\n  input: \u0026quot;effect_departments/init/make_diag_scale/LinearOperatorScaledIdentity/ExpandDims_1\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_3/sample/affine_linear_operator/forward/DistributionShape_1/undo_make_batch_of_event_sample_matrices/rotate_transpose/shift\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 1\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_3/sample/affine_linear_operator/forward/DistributionShape_1/undo_make_batch_of_event_sample_matrices/rotate_transpose/assert_integer/statically_determined_was_integer\u0026quot;\\n  op: \u0026quot;NoOp\u0026quot;\\n}\\nnode {\\n  name: \u0026quot;effect_departments_3/sample/affine_linear_operator/forward/DistributionShape_1/undo_make_batch_of_event_sample_matrices/rotate_transpose/transpose/perm\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 2\\n          }\\n        }\\n        tensor_content: \u0026quot;\\\\001\\\\000\\\\000\\\\000\\\\000\\\\000\\\\000\\\\000\u0026quot;\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_3/sample/affine_linear_operator/forward/DistributionShape_1/undo_make_batch_of_event_sample_matrices/rotate_transpose/transpose\u0026quot;\\n  op: \u0026quot;Transpose\u0026quot;\\n  input: \u0026quot;effect_departments_3/sample/affine_linear_operator/forward/LinearOperatorScaledIdentity/matmul/mul\u0026quot;\\n  input: \u0026quot;effect_departments_3/sample/affine_linear_operator/forward/DistributionShape_1/undo_make_batch_of_event_sample_matrices/rotate_transpose/transpose/perm\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;Tperm\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_3/sample/affine_linear_operator/forward/DistributionShape_1/undo_make_batch_of_event_sample_matrices/DistributionShape/get_shape/DistributionShape/get_shape/DistributionShape/get_shape/ndims\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 2\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_3/sample/affine_linear_operator/forward/DistributionShape_1/undo_make_batch_of_event_sample_matrices/DistributionShape/get_shape/DistributionShape/get_shape/sample_ndims\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 1\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_3/sample/affine_linear_operator/forward/DistributionShape_1/undo_make_batch_of_event_sample_matrices/DistributionShape/get_shape/zero\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_3/sample/affine_linear_operator/forward/DistributionShape_1/undo_make_batch_of_event_sample_matrices/DistributionShape/get_shape/sample_shape\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 1\\n          }\\n        }\\n        int_val: 1\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_3/sample/affine_linear_operator/forward/DistributionShape_1/undo_make_batch_of_event_sample_matrices/DistributionShape/get_shape/batch_shape\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n          }\\n        }\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_3/sample/affine_linear_operator/forward/DistributionShape_1/undo_make_batch_of_event_sample_matrices/DistributionShape/get_shape/event_shape\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 1\\n          }\\n        }\\n        int_val: 14\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_3/sample/affine_linear_operator/forward/DistributionShape_1/undo_make_batch_of_event_sample_matrices/concat/axis\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_3/sample/affine_linear_operator/forward/DistributionShape_1/undo_make_batch_of_event_sample_matrices/concat\u0026quot;\\n  op: \u0026quot;ConcatV2\u0026quot;\\n  input: \u0026quot;effect_departments_3/sample/affine_linear_operator/forward/DistributionShape/make_batch_of_event_sample_matrices/DistributionShape/get_shape/sample_shape\u0026quot;\\n  input: \u0026quot;effect_departments_3/sample/affine_linear_operator/forward/DistributionShape_1/undo_make_batch_of_event_sample_matrices/DistributionShape/get_shape/batch_shape\u0026quot;\\n  input: \u0026quot;effect_departments_3/sample/affine_linear_operator/forward/DistributionShape_1/undo_make_batch_of_event_sample_matrices/DistributionShape/get_shape/event_shape\u0026quot;\\n  input: \u0026quot;effect_departments_3/sample/affine_linear_operator/forward/DistributionShape_1/undo_make_batch_of_event_sample_matrices/concat/axis\u0026quot;\\n  attr {\\n    key: \u0026quot;N\u0026quot;\\n    value {\\n      i: 3\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;Tidx\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_3/sample/affine_linear_operator/forward/DistributionShape_1/undo_make_batch_of_event_sample_matrices/Reshape\u0026quot;\\n  op: \u0026quot;Reshape\u0026quot;\\n  input: \u0026quot;effect_departments_3/sample/affine_linear_operator/forward/DistributionShape_1/undo_make_batch_of_event_sample_matrices/rotate_transpose/transpose\u0026quot;\\n  input: \u0026quot;effect_departments_3/sample/affine_linear_operator/forward/DistributionShape_1/undo_make_batch_of_event_sample_matrices/concat\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;Tshape\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;effect_departments_3/sample/affine_linear_operator/forward/add\u0026quot;\\n  op: \u0026quot;Add\u0026quot;\\n  input: \u0026quot;effect_departments_3/sample/affine_linear_operator/forward/DistributionShape_1/undo_make_batch_of_event_sample_matrices/Reshape\u0026quot;\\n  input: \u0026quot;zeros_4\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;mul/y\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_FLOAT\\n        tensor_shape {\\n          dim {\\n            size: 58737\\n          }\\n        }\\n        tensor_content: \u0026quot;\u003cstripped 234948 bytes\u003e\u0026quot;\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;mul\u0026quot;\\n  op: \u0026quot;Mul\u0026quot;\\n  input: \u0026quot;effect_service/read\u0026quot;\\n  input: \u0026quot;mul/y\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;GatherV2/indices\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 58737\\n          }\\n        }\\n        tensor_content: \u0026quot;\u003cstripped 234948 bytes\u003e\u0026quot;\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;GatherV2/axis\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;GatherV2\u0026quot;\\n  op: \u0026quot;GatherV2\u0026quot;\\n  input: \u0026quot;effect_students_3/sample/affine_linear_operator/forward/add\u0026quot;\\n  input: \u0026quot;GatherV2/indices\u0026quot;\\n  input: \u0026quot;GatherV2/axis\u0026quot;\\n  attr {\\n    key: \u0026quot;Taxis\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;Tindices\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;Tparams\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;add\u0026quot;\\n  op: \u0026quot;Add\u0026quot;\\n  input: \u0026quot;mul\u0026quot;\\n  input: \u0026quot;GatherV2\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;GatherV2_1/indices\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 58737\\n          }\\n        }\\n        tensor_content: \u0026quot;\u003cstripped 234948 bytes\u003e\u0026quot;\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;GatherV2_1/axis\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;GatherV2_1\u0026quot;\\n  op: \u0026quot;GatherV2\u0026quot;\\n  input: \u0026quot;effect_instructors_3/sample/affine_linear_operator/forward/add\u0026quot;\\n  input: \u0026quot;GatherV2_1/indices\u0026quot;\\n  input: \u0026quot;GatherV2_1/axis\u0026quot;\\n  attr {\\n    key: \u0026quot;Taxis\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;Tindices\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;Tparams\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;add_1\u0026quot;\\n  op: \u0026quot;Add\u0026quot;\\n  input: \u0026quot;add\u0026quot;\\n  input: \u0026quot;GatherV2_1\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;GatherV2_2/indices\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 58737\\n          }\\n        }\\n        tensor_content: \u0026quot;\u003cstripped 234948 bytes\u003e\u0026quot;\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;GatherV2_2/axis\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;GatherV2_2\u0026quot;\\n  op: \u0026quot;GatherV2\u0026quot;\\n  input: \u0026quot;effect_departments_3/sample/affine_linear_operator/forward/add\u0026quot;\\n  input: \u0026quot;GatherV2_2/indices\u0026quot;\\n  input: \u0026quot;GatherV2_2/axis\u0026quot;\\n  attr {\\n    key: \u0026quot;Taxis\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;Tindices\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;Tparams\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;add_2\u0026quot;\\n  op: \u0026quot;Add\u0026quot;\\n  input: \u0026quot;add_1\u0026quot;\\n  input: \u0026quot;GatherV2_2\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;add_3\u0026quot;\\n  op: \u0026quot;Add\u0026quot;\\n  input: \u0026quot;add_2\u0026quot;\\n  input: \u0026quot;intercept/read\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;ratings/loc\u0026quot;\\n  op: \u0026quot;Identity\u0026quot;\\n  input: \u0026quot;add_3\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;ratings/scale/input\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_FLOAT\\n        tensor_shape {\\n        }\\n        float_val: 1.0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;ratings/scale\u0026quot;\\n  op: \u0026quot;Identity\u0026quot;\\n  input: \u0026quot;ratings/scale/input\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;ratings_1/sample/sample_shape\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n          }\\n        }\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;ratings_1/sample/ratings/batch_shape_tensor/batch_shape\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 1\\n          }\\n        }\\n        int_val: 58737\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;ratings_1/sample/concat/values_0\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 1\\n          }\\n        }\\n        int_val: 1\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;ratings_1/sample/concat/axis\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;ratings_1/sample/concat\u0026quot;\\n  op: \u0026quot;ConcatV2\u0026quot;\\n  input: \u0026quot;ratings_1/sample/concat/values_0\u0026quot;\\n  input: \u0026quot;ratings_1/sample/ratings/batch_shape_tensor/batch_shape\u0026quot;\\n  input: \u0026quot;ratings_1/sample/concat/axis\u0026quot;\\n  attr {\\n    key: \u0026quot;N\u0026quot;\\n    value {\\n      i: 2\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;Tidx\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;ratings_1/sample/random_normal/mean\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_FLOAT\\n        tensor_shape {\\n        }\\n        float_val: 0.0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;ratings_1/sample/random_normal/stddev\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_FLOAT\\n        tensor_shape {\\n        }\\n        float_val: 1.0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;ratings_1/sample/random_normal/RandomStandardNormal\u0026quot;\\n  op: \u0026quot;RandomStandardNormal\u0026quot;\\n  input: \u0026quot;ratings_1/sample/concat\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;seed\u0026quot;\\n    value {\\n      i: 0\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;seed2\u0026quot;\\n    value {\\n      i: 0\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;ratings_1/sample/random_normal/mul\u0026quot;\\n  op: \u0026quot;Mul\u0026quot;\\n  input: \u0026quot;ratings_1/sample/random_normal/RandomStandardNormal\u0026quot;\\n  input: \u0026quot;ratings_1/sample/random_normal/stddev\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;ratings_1/sample/random_normal\u0026quot;\\n  op: \u0026quot;Add\u0026quot;\\n  input: \u0026quot;ratings_1/sample/random_normal/mul\u0026quot;\\n  input: \u0026quot;ratings_1/sample/random_normal/mean\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;ratings_1/sample/mul\u0026quot;\\n  op: \u0026quot;Mul\u0026quot;\\n  input: \u0026quot;ratings_1/sample/random_normal\u0026quot;\\n  input: \u0026quot;ratings/scale\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;ratings_1/sample/add\u0026quot;\\n  op: \u0026quot;Add\u0026quot;\\n  input: \u0026quot;ratings_1/sample/mul\u0026quot;\\n  input: \u0026quot;ratings/loc\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;ratings_1/sample/Shape\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 2\\n          }\\n        }\\n        tensor_content: \u0026quot;\\\\001\\\\000\\\\000\\\\000q\\\\345\\\\000\\\\000\u0026quot;\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;ratings_1/sample/strided_slice/stack\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 1\\n          }\\n        }\\n        int_val: 1\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;ratings_1/sample/strided_slice/stack_1\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 1\\n          }\\n        }\\n        int_val: 0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;ratings_1/sample/strided_slice/stack_2\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n          dim {\\n            size: 1\\n          }\\n        }\\n        int_val: 1\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;ratings_1/sample/strided_slice\u0026quot;\\n  op: \u0026quot;StridedSlice\u0026quot;\\n  input: \u0026quot;ratings_1/sample/Shape\u0026quot;\\n  input: \u0026quot;ratings_1/sample/strided_slice/stack\u0026quot;\\n  input: \u0026quot;ratings_1/sample/strided_slice/stack_1\u0026quot;\\n  input: \u0026quot;ratings_1/sample/strided_slice/stack_2\u0026quot;\\n  attr {\\n    key: \u0026quot;Index\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;begin_mask\u0026quot;\\n    value {\\n      i: 0\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;ellipsis_mask\u0026quot;\\n    value {\\n      i: 0\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;end_mask\u0026quot;\\n    value {\\n      i: 1\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;new_axis_mask\u0026quot;\\n    value {\\n      i: 0\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;shrink_axis_mask\u0026quot;\\n    value {\\n      i: 0\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;ratings_1/sample/concat_1/axis\u0026quot;\\n  op: \u0026quot;Const\u0026quot;\\n  attr {\\n    key: \u0026quot;dtype\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;value\u0026quot;\\n    value {\\n      tensor {\\n        dtype: DT_INT32\\n        tensor_shape {\\n        }\\n        int_val: 0\\n      }\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;ratings_1/sample/concat_1\u0026quot;\\n  op: \u0026quot;ConcatV2\u0026quot;\\n  input: \u0026quot;ratings_1/sample/sample_shape\u0026quot;\\n  input: \u0026quot;ratings_1/sample/strided_slice\u0026quot;\\n  input: \u0026quot;ratings_1/sample/concat_1/axis\u0026quot;\\n  attr {\\n    key: \u0026quot;N\u0026quot;\\n    value {\\n      i: 2\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;Tidx\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n}\\nnode {\\n  name: \u0026quot;ratings_1/sample/Reshape\u0026quot;\\n  op: \u0026quot;Reshape\u0026quot;\\n  input: \u0026quot;ratings_1/sample/add\u0026quot;\\n  input: \u0026quot;ratings_1/sample/concat_1\u0026quot;\\n  attr {\\n    key: \u0026quot;T\u0026quot;\\n    value {\\n      type: DT_FLOAT\\n    }\\n  }\\n  attr {\\n    key: \u0026quot;Tshape\u0026quot;\\n    value {\\n      type: DT_INT32\\n    }\\n  }\\n}\\n';\n",
              "        }\n",
              "      \u003c/script\u003e\n",
              "      \u003clink rel=\u0026quot;import\u0026quot; href=\u0026quot;https://tensorboard.appspot.com/tf-graph-basic.build.html\u0026quot; onload=load()\u003e\n",
              "      \u003cdiv style=\u0026quot;height:600px\u0026quot;\u003e\n",
              "        \u003ctf-graph-basic id=\u0026quot;graph0.482669299759\u0026quot;\u003e\u003c/tf-graph-basic\u003e\n",
              "      \u003c/div\u003e\n",
              "  \"\u003e\u003c/iframe\u003e\n",
              "  "
            ],
            "text/plain": [
              "\u003cIPython.core.display.HTML at 0xe0d5ed0\u003e"
            ]
          },
          "metadata": {
            "tags": []
          },
          "output_type": "display_data"
        }
      ],
      "source": [
        "def strip_consts(graph_def, max_const_size=32):\n",
        "  \"\"\"Strip large constant values from graph_def.\"\"\"\n",
        "  strip_def = tf.GraphDef()\n",
        "  for n0 in graph_def.node:\n",
        "    n = strip_def.node.add()\n",
        "    n.MergeFrom(n0)\n",
        "    if n.op == 'Const':\n",
        "      tensor = n.attr['value'].tensor\n",
        "      size = len(tensor.tensor_content)\n",
        "      if size \u003e max_const_size:\n",
        "        tensor.tensor_content = \"\u003cstripped %d bytes\u003e\"%size\n",
        "  return strip_def\n",
        "\n",
        "def draw_graph(model, *args, **kwargs):\n",
        "  \"\"\"Visualize TensorFlow graph.\"\"\"\n",
        "  graph = tf.Graph()\n",
        "  with graph.as_default():\n",
        "    model(*args, **kwargs)\n",
        "  graph_def = graph.as_graph_def()\n",
        "  strip_def = strip_consts(graph_def, max_const_size=32)\n",
        "  code = \"\"\"\n",
        "      \u003cscript\u003e\n",
        "        function load() {{\n",
        "          document.getElementById(\"{id}\").pbtxt = {data};\n",
        "        }}\n",
        "      \u003c/script\u003e\n",
        "      \u003clink rel=\"import\" href=\"https://tensorboard.appspot.com/tf-graph-basic.build.html\" onload=load()\u003e\n",
        "      \u003cdiv style=\"height:600px\"\u003e\n",
        "        \u003ctf-graph-basic id=\"{id}\"\u003e\u003c/tf-graph-basic\u003e\n",
        "      \u003c/div\u003e\n",
        "  \"\"\".format(data=repr(str(strip_def)), id='graph'+str(np.random.rand()))\n",
        "\n",
        "  iframe = \"\"\"\n",
        "      \u003ciframe seamless style=\"width:1200px;height:620px;border:0\" srcdoc=\"{}\"\u003e\u003c/iframe\u003e\n",
        "  \"\"\".format(code.replace('\"', '\u0026quot;'))\n",
        "  IPython.display.display(IPython.display.HTML(iframe))\n",
        "\n",
        "\n",
        "draw_graph(model, features_train)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "ZPZTWsCeB7Va",
        "slideshow": {
          "slide_type": "-"
        }
      },
      "source": [
        "## Parameter Estimation\n",
        "\n",
        "Given data, the goal of inference is to fit the model's fixed effects slope $\\beta$, intercept $\\alpha$, and variance component parameter $\\sigma^2$. The maximum likelihood principle formalizes this task as\n",
        "\n",
        "$$\n",
        "\\max_{\\beta, \\alpha, \\sigma}~\\log p(\\mathbf{y}\\mid \\mathbf{X}, \\mathbf{Z}; \\beta, \\alpha, \\sigma) = \\max_{\\beta, \\alpha, \\sigma}~\\log \\int p(\\eta; \\sigma) ~p(\\mathbf{y}\\mid \\mathbf{X}, \\mathbf{Z}, \\eta; \\beta, \\alpha)~d\\eta.\n",
        "$$\n",
        "\n",
        "In this tutorial, we use the Monte Carlo EM algorithm to maximize this marginal density (Dempster et al., 1977; Wei and Tanner, 1990).¹ We perform Markov chain Monte Carlo to compute the expectation of the conditional likelihood with respect to the random effects (\"E-step\"), and we perform gradient descent to maximize the expectation with respect to the parameters (\"M-step\"):\n",
        "\n",
        "+ For the E-step, we set up Hamiltonian Monte Carlo (HMC). It takes a current state—the student, instructor, and department effects—and returns a new state. We assign the new state to TensorFlow variables, which will denote the state of the HMC chain.\n",
        "\n",
        "+ For the M-step, we use the posterior sample from HMC to calculate an unbiased estimate of the marginal likelihood up to a constant. We then apply its gradient with respect to the parameters of interest. This produces an unbiased stochastic descent step on the marginal likelihood. We implement it with the Adam TensorFlow optimizer and minimize the negative of the marginal."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 0,
      "metadata": {
        "colab": {
          "autoexec": {
            "startup": false,
            "wait_interval": 0
          }
        },
        "colab_type": "code",
        "id": "F7uOcwQFB7Vb",
        "slideshow": {
          "slide_type": "-"
        }
      },
      "outputs": [],
      "source": [
        "log_joint = ed.make_log_joint_fn(model_template)\n",
        "\n",
        "def target_log_prob_fn(effect_students, effect_instructors, effect_departments):\n",
        "  \"\"\"Unnormalized target density as a function of states.\"\"\"\n",
        "  return log_joint(  # fix `features` and `ratings` to the training data\n",
        "    features=features_train,\n",
        "    effect_students=effect_students,\n",
        "    effect_instructors=effect_instructors,\n",
        "    effect_departments=effect_departments,\n",
        "    ratings=labels_train)\n",
        "\n",
        "# Set up E-step (MCMC).\n",
        "effect_students = tf.get_variable(  # `trainable=False` so unaffected by M-step\n",
        "    \"effect_students\", [num_students], trainable=False)\n",
        "effect_instructors = tf.get_variable(\n",
        "    \"effect_instructors\", [num_instructors], trainable=False)\n",
        "effect_departments = tf.get_variable(\n",
        "    \"effect_departments\", [num_departments], trainable=False)\n",
        "\n",
        "hmc = tfp.mcmc.HamiltonianMonteCarlo(\n",
        "    target_log_prob_fn=target_log_prob_fn,\n",
        "    step_size=0.015,\n",
        "    num_leapfrog_steps=3)\n",
        "\n",
        "current_state = [effect_students, effect_instructors, effect_departments]\n",
        "with warnings.catch_warnings(UserWarning):\n",
        "  # TensorFlow raises a warning about converting sparse IndexedSlices to a\n",
        "  # dense Tensor during gradient computation. This can consume a large amount\n",
        "  # of memory. We're okay with that as the number of categories is small.\n",
        "  warnings.simplefilter(\"ignore\")\n",
        "  next_state, kernel_results = hmc.one_step(\n",
        "      current_state=current_state,\n",
        "      previous_kernel_results=hmc.bootstrap_results(current_state))\n",
        "\n",
        "expectation_update = tf.group(\n",
        "    effect_students.assign(next_state[0]),\n",
        "    effect_instructors.assign(next_state[1]),\n",
        "    effect_departments.assign(next_state[2]))\n",
        "\n",
        "# Set up M-step (gradient descent).\n",
        "# The following should work. However, TensorFlow raises an error about taking\n",
        "# gradients through IndexedSlices tensors. This may be a TF bug. For now,\n",
        "# we recompute the target's log probability at the current state.\n",
        "# loss = -kernel_results.accepted_results.target_log_prob\n",
        "with tf.control_dependencies([expectation_update]):\n",
        "  loss = -target_log_prob_fn(effect_students,\n",
        "                             effect_instructors,\n",
        "                             effect_departments)\n",
        "  optimizer = tf.train.AdamOptimizer(learning_rate=0.01)\n",
        "  minimization_update = optimizer.minimize(loss)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "6BaHczzpkt0k"
      },
      "source": [
        "We perform a warm-up stage, which runs one MCMC chain for a number of iterations so that training may be initialized within the posterior's probability mass. We then run a training loop. It jointly runs the E and M-steps and records values during training."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 9,
      "metadata": {
        "colab": {
          "autoexec": {
            "startup": false,
            "wait_interval": 0
          },
          "height": 136
        },
        "colab_type": "code",
        "executionInfo": {
          "elapsed": 2937344,
          "status": "ok",
          "timestamp": 1523412552856,
          "user": {
            "displayName": "",
            "photoUrl": "",
            "userId": ""
          },
          "user_tz": 420
        },
        "id": "zxbcYtrUt3OG",
        "outputId": "815c1ca0-526a-4c10-e810-97f92d57c3f7"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "Warm-Up Iteration:   0 Acceptance Rate: 1.000\n",
            "Warm-Up Iteration: 500 Acceptance Rate: 0.826\n",
            "Warm-Up Iteration: 999 Acceptance Rate: 0.743\n",
            "Iteration:    0 Acceptance Rate: 1.000 Loss: 99786.445\n",
            "Iteration:  500 Acceptance Rate: 0.693 Loss: 95970.469\n",
            "Iteration: 1000 Acceptance Rate: 0.689 Loss: 96028.242\n",
            "Iteration: 1499 Acceptance Rate: 0.695 Loss: 96007.359\n"
          ]
        }
      ],
      "source": [
        "init = tf.global_variables_initializer()\n",
        "\n",
        "num_warmup_iters = 1000\n",
        "num_iters = 1500\n",
        "num_accepted = 0\n",
        "effect_students_samples = np.zeros([num_iters, num_students])\n",
        "effect_instructors_samples = np.zeros([num_iters, num_instructors])\n",
        "effect_departments_samples = np.zeros([num_iters, num_departments])\n",
        "loss_history = np.zeros([num_iters])\n",
        "\n",
        "sess = tf.Session()\n",
        "sess.run(init)\n",
        "\n",
        "# Run warm-up stage.\n",
        "for t in range(num_warmup_iters):\n",
        "  _, is_accepted_val = sess.run(\n",
        "      [expectation_update, kernel_results.is_accepted])\n",
        "  num_accepted += is_accepted_val\n",
        "  if t % 500 == 0 or t == num_warmup_iters - 1:\n",
        "    print(\"Warm-Up Iteration: {:\u003e3} Acceptance Rate: {:.3f}\".format(\n",
        "        t, num_accepted / (t + 1)))\n",
        "\n",
        "num_accepted = 0  # reset acceptance rate counter\n",
        "\n",
        "# Run training.\n",
        "for t in range(num_iters):\n",
        "  for _ in range(5):  # run 5 MCMC iterations before every joint EM update\n",
        "    _ = sess.run(expectation_update)\n",
        "  [\n",
        "      _,\n",
        "      _,\n",
        "      effect_students_val,\n",
        "      effect_instructors_val,\n",
        "      effect_departments_val,\n",
        "      is_accepted_val,\n",
        "      loss_val,\n",
        "  ] = sess.run([\n",
        "      expectation_update,\n",
        "      minimization_update,\n",
        "      effect_students,\n",
        "      effect_instructors,\n",
        "      effect_departments,\n",
        "      kernel_results.is_accepted,\n",
        "      loss,\n",
        "  ])\n",
        "  effect_students_samples[t, :] = effect_students_val\n",
        "  effect_instructors_samples[t, :] = effect_instructors_val\n",
        "  effect_departments_samples[t, :] = effect_departments_val\n",
        "  num_accepted += is_accepted_val\n",
        "  loss_history[t] = loss_val\n",
        "  if t % 500 == 0 or t == num_iters - 1:\n",
        "    print(\"Iteration: {:\u003e4} Acceptance Rate: {:.3f} Loss: {:.3f}\".format(\n",
        "        t, num_accepted / (t + 1), loss_val))"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "r6U2zkdbHj5z"
      },
      "source": [
        "Above, we did not run the algorithm until a convergence threshold was detected. To check whether training was sensible, we verify that the loss function indeed tends to converge over training iterations."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 10,
      "metadata": {
        "colab": {
          "autoexec": {
            "startup": false,
            "wait_interval": 0
          },
          "height": 294
        },
        "colab_type": "code",
        "executionInfo": {
          "elapsed": 5717,
          "status": "ok",
          "timestamp": 1523412832731,
          "user": {
            "displayName": "",
            "photoUrl": "",
            "userId": ""
          },
          "user_tz": 420
        },
        "id": "HR4A6FLCwD7b",
        "outputId": "9931413d-ea23-4c55-9672-40686b5edd6a"
      },
      "outputs": [
        {
          "data": {
            "image/png": "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\nZjF37ly3xWKxWMjNzaW1tRW9Xq/1Zfy7Xoq7du2ioqICPz8/0tPTiY6OdkmsDoeDd999F5PJRFZW\nFmazmZycHDo6Ohg3bhwrV67EYDBgt9vJzc3l4sWLBAUF8eabbxIWFuaSGG02G59//jmXL19Gp9Ox\nYsUKxowZ43G5/P777yktLUWn0xEVFUVaWhotLS1uz2d+fj5nz54lODiYTZs2AX/f13Ow/JWVlVFU\nVATAvHnztG41zoyzsLCQX3/9FaPRyKhRo0hLS9PiLCoqorS0FIPBQGpqKpMmTQKcfy4YKM4+hw4d\nYu/evezcuVO7xceT8gnwww8/cOTIEQwGA48//rjWGm9I86nE3+rp6VEZGRnKbDarmzdvqrfffltd\nuXLFbfH8+eefqr6+XimlVGdnp1q1apW6cuWK2rNnjzp48KBSSqmioiJVWFiolFLq7Nmz6pNPPlFK\nKVVbW6vee+89l8VaXFyscnJy1IYNG5RSSmVnZ6uTJ08qpZT64osv1NGjR5VSSh05ckTt2LFDKaXU\niRMn1ObNm10WY25uriopKVFKKWW325XVavW4XFosFpWenq5u3ryplOrNY2lpqUfk8/z586q+vl6t\nWbNGG7vf/LW3t6uMjAxltVpVR0eH9ntnx1lZWal6enqUUkoVFhaqvXv3KqWUunz5ssrMzFR2u11d\nu3ZNZWRkKIfD4ZJzwUBxKqVUc3OzWr9+vUpLS1Pt7e1KKc/LZ3V1tfroo4+U3W5XSil148YNpdTQ\n51OmB++irq6OMWPGEB4ejtFoZMqUKW7tUxgSEqL9b8rf35+xY8disVju6KVYXl4OwC+//KKNjx8/\nHpvN1u9+N2exWCycO3eO5ORkbay6uponn3wSgBkzZmh5vDXGp556iqqqKqfHB9DZ2cmFCxe0m9gN\nBgPDhw/3uFxC71VrV1cXPT09dHd3YzKZ+O2339yez4cffviOW0XuN3+VlZXEx8czfPhwAgICiI+P\np6KiwulxxsfHo9frtXj6GhGUl5fzzDPPYDAYiIiIYMyYMdTV1bnkXDBQnABffvklCxcu7Dfmafk8\nevQoc+fOxWAwAGjNIIY6nzI9eBe39y80mUzU1dW5MaL/MZvNXLp0ibi4uDt6Kd64cQMYOP6Wlhbt\nuc7S9yWz2WwAtLe3ExgYqJ0kbu0DeWuMer2egIAAOjo6tCkQZ7l27RpBQUHk5eVx6dIlYmJiSE1N\n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\n",
            "text/plain": [
              "\u003cmatplotlib.figure.Figure at 0x8756990\u003e"
            ]
          },
          "metadata": {
            "tags": []
          },
          "output_type": "display_data"
        }
      ],
      "source": [
        "plt.plot(loss_history)\n",
        "plt.ylabel(r'Loss $-\\log$ $p(y\\mid\\mathbf{x})$')\n",
        "plt.xlabel('Iteration')\n",
        "plt.show()"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "Fz7FphO9LwVE"
      },
      "source": [
        "We also use a trace plot, which shows the Markov chain Monte Carlo algorithm's trajectory across specific latent dimensions. Below we see that specific instructor effects indeed meaningfully transition away from their initial state and explore the state space. The trace plot also indicates that the effects differ across instructors but with similar mixing behavior."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 11,
      "metadata": {
        "colab": {
          "autoexec": {
            "startup": false,
            "wait_interval": 0
          },
          "height": 294
        },
        "colab_type": "code",
        "executionInfo": {
          "elapsed": 2009,
          "status": "ok",
          "timestamp": 1523412834873,
          "user": {
            "displayName": "",
            "photoUrl": "",
            "userId": ""
          },
          "user_tz": 420
        },
        "id": "_NvaIhgrvY9o",
        "outputId": "e194a815-4cc2-453d-bc44-8f281a717d7c"
      },
      "outputs": [
        {
          "data": {
            "image/png": "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\nYII=\n",
            "text/plain": [
              "\u003cmatplotlib.figure.Figure at 0x11313e50\u003e"
            ]
          },
          "metadata": {
            "tags": []
          },
          "output_type": "display_data"
        }
      ],
      "source": [
        "for i in range(7):\n",
        "  plt.plot(effect_instructors_samples[:, i])\n",
        "\n",
        "plt.legend([i for i in range(7)], loc='lower right')\n",
        "plt.ylabel('Instructor Effects')\n",
        "plt.xlabel('Iteration')\n",
        "plt.show()"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "-xVCGWZoB7Vd",
        "slideshow": {
          "slide_type": "-"
        }
      },
      "source": [
        "## Criticism\n",
        "\n",
        "Above, we fitted the model. We now look into criticizing its fit using data, which lets us explore and better understand the model. One such technique is a residual plot, which plots the difference between the model's predictions and ground truth for each data point. If the model were correct, then their difference should be standard normally distributed; any deviations from this pattern in the plot indicate model misfit.\n",
        "\n",
        "We build the residual plot by first forming the posterior predictive distribution over ratings, which replaces the prior distribution on the random effects with its posterior given training data. In particular, we run the model forward and intercept its dependence on prior random effects with their inferred posterior means.²"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 0,
      "metadata": {
        "colab": {
          "autoexec": {
            "startup": false,
            "wait_interval": 0
          }
        },
        "colab_type": "code",
        "id": "p4vreJekB7Vf",
        "slideshow": {
          "slide_type": "-"
        }
      },
      "outputs": [],
      "source": [
        "def interceptor(rv_constructor, *rv_args, **rv_kwargs):\n",
        "  \"\"\"Replaces prior on effects with empirical posterior mean from MCMC.\"\"\"\n",
        "  name = rv_kwargs.pop(\"name\")\n",
        "  if name == \"effect_students\":\n",
        "    rv_kwargs[\"value\"] = np.mean(effect_students_samples, 0)\n",
        "  elif name == \"effect_instructors\":\n",
        "    rv_kwargs[\"value\"] = np.mean(effect_instructors_samples, 0)\n",
        "  elif name == \"effect_departments\":\n",
        "    rv_kwargs[\"value\"] = np.mean(effect_departments_samples, 0)\n",
        "  return rv_constructor(*rv_args, **rv_kwargs)\n",
        "\n",
        "with ed.interception(interceptor):\n",
        "  ratings_posterior = model_template(features=features_test)\n",
        "\n",
        "ratings_prediction = ratings_posterior.distribution.mean()"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "zTQJ3d-Hv93z"
      },
      "source": [
        "Upon visual inspection, the residuals look somewhat standard-normally distributed. However, the fit is not perfect: there is larger probability mass in the tails than a normal distribution, which indicates the model might improve its fit by relaxing its normality assumptions.\n",
        "\n",
        "In particular, although it is most common to use a normal distribution to model ratings in the `InstEval` data set, a closer look at the data reveals that course evaluation ratings are in fact ordinal values from 1 to 5. This suggests that we should be using an ordinal distribution, or even Categorical if we have enough data to throw away the relative ordering. This is a one-line change to the Edward program above; the same inference code is applicable."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 14,
      "metadata": {
        "colab": {
          "autoexec": {
            "startup": false,
            "wait_interval": 0
          },
          "height": 287
        },
        "colab_type": "code",
        "executionInfo": {
          "elapsed": 1022,
          "status": "ok",
          "timestamp": 1523412837934,
          "user": {
            "displayName": "",
            "photoUrl": "",
            "userId": ""
          },
          "user_tz": 420
        },
        "id": "0jIxfwuvEWLG",
        "outputId": "25c16070-d34a-4836-ee74-33a55e9b3adc"
      },
      "outputs": [
        {
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "\u003cmatplotlib.figure.Figure at 0x11302510\u003e"
            ]
          },
          "metadata": {
            "tags": []
          },
          "output_type": "display_data"
        }
      ],
      "source": [
        "ratings_pred = sess.run(ratings_prediction)\n",
        "plt.title(\"Residuals for Predicted Ratings on Test Set\")\n",
        "plt.xlim(-4, 4)\n",
        "plt.ylim(0, 800)\n",
        "plt.hist(ratings_pred - labels_test, 75)\n",
        "plt.show()"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "wi4hnI8UxFD2"
      },
      "source": [
        "To explore how the model makes individual predictions, we look at the histogram of effects for students, instructors, and departments. This lets us understand how individual elements in a data point's feature vector tends to influence the outcome.\n",
        "\n",
        "Not surprisingly, we see below that each student typically has little effect on an instructor's evaluation rating. Interestingly, we see that the department an instructor belongs to has a large effect."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 0,
      "metadata": {
        "colab": {
          "autoexec": {
            "startup": false,
            "wait_interval": 0
          }
        },
        "colab_type": "code",
        "id": "JY1p26-W8hVz"
      },
      "outputs": [],
      "source": [
        "[\n",
        "    effect_students_mean,\n",
        "    effect_instructors_mean,\n",
        "    effect_departments_mean,\n",
        "] = sess.run([\n",
        "    tf.reduce_mean(effect_students_samples, 0),\n",
        "    tf.reduce_mean(effect_instructors_samples, 0),\n",
        "    tf.reduce_mean(effect_departments_samples, 0),\n",
        "])"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 16,
      "metadata": {
        "colab": {
          "autoexec": {
            "startup": false,
            "wait_interval": 0
          },
          "height": 287
        },
        "colab_type": "code",
        "executionInfo": {
          "elapsed": 1074,
          "status": "ok",
          "timestamp": 1523412847283,
          "user": {
            "displayName": "",
            "photoUrl": "",
            "userId": ""
          },
          "user_tz": 420
        },
        "id": "MU-L604RFkxg",
        "outputId": "daae7805-c846-4a99-c301-bf5d412e77ca"
      },
      "outputs": [
        {
          "data": {
            "image/png": "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\nQf8PeB30kwniC+AAAAAASUVORK5CYII=\n",
            "text/plain": [
              "\u003cmatplotlib.figure.Figure at 0x8756790\u003e"
            ]
          },
          "metadata": {
            "tags": []
          },
          "output_type": "display_data"
        }
      ],
      "source": [
        "plt.title(\"Histogram of Student Effects\")\n",
        "plt.hist(effect_students_mean, 75)\n",
        "plt.show()"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 17,
      "metadata": {
        "colab": {
          "autoexec": {
            "startup": false,
            "wait_interval": 0
          },
          "height": 287
        },
        "colab_type": "code",
        "executionInfo": {
          "elapsed": 834,
          "status": "ok",
          "timestamp": 1523412848724,
          "user": {
            "displayName": "",
            "photoUrl": "",
            "userId": ""
          },
          "user_tz": 420
        },
        "id": "22qgTW7SGulD",
        "outputId": "3e35da15-558d-4d42-c476-b50903702585"
      },
      "outputs": [
        {
          "data": {
            "image/png": "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\nTkSuQmCC\n",
            "text/plain": [
              "\u003cmatplotlib.figure.Figure at 0x147aeb90\u003e"
            ]
          },
          "metadata": {
            "tags": []
          },
          "output_type": "display_data"
        }
      ],
      "source": [
        "plt.title(\"Histogram of Instructor Effects\")\n",
        "plt.hist(effect_instructors_mean, 75)\n",
        "plt.show()"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 18,
      "metadata": {
        "colab": {
          "autoexec": {
            "startup": false,
            "wait_interval": 0
          },
          "height": 287
        },
        "colab_type": "code",
        "executionInfo": {
          "elapsed": 605,
          "status": "ok",
          "timestamp": 1523412849489,
          "user": {
            "displayName": "",
            "photoUrl": "",
            "userId": ""
          },
          "user_tz": 420
        },
        "id": "lTd2_uodGu2F",
        "outputId": "2bad980f-eafd-4ccd-dbd9-02626fe3dfd1"
      },
      "outputs": [
        {
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "\u003cmatplotlib.figure.Figure at 0x152b3190\u003e"
            ]
          },
          "metadata": {
            "tags": []
          },
          "output_type": "display_data"
        }
      ],
      "source": [
        "plt.title(\"Histogram of Department Effects\")\n",
        "plt.hist(effect_departments_mean, 75)\n",
        "plt.show()"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "Ck3cPwIjvyqO"
      },
      "source": [
        "## Footnotes\n",
        "\n",
        "¹ Linear mixed effect models are a special case where we can analytically compute its marginal density. For the purposes of this tutorial, we demonstrate Monte Carlo EM, which more readily applies to non-analytic marginal densities such as if the likelihood were extended to be Categorical instead of Normal.\n",
        "\n",
        "² For simplicity, we form the predictive distribution's mean using only one forward pass of the model. This is done by conditioning on the posterior mean and is valid for linear mixed effects models. However, this is not valid in general: the posterior predictive distribution's mean is typically intractable and requires taking the empirical mean across multiple forward passes of the model given posterior samples."
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "8pm6qMKvB7WB",
        "slideshow": {
          "slide_type": "-"
        }
      },
      "source": [
        "## Acknowledgments\n",
        "\n",
        "This tutorial was originally written in Edward 1.0 ([source](https://github.com/blei-lab/edward/blob/master/notebooks/linear_mixed_effects_models.ipynb)). We thank all contributors to writing and revising that version."
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "sHw7WpM1IzLO"
      },
      "source": [
        "## References\n",
        "\n",
        "1. Douglas Bates and Martin Machler and Ben Bolker and Steve Walker. Fitting Linear Mixed-Effects Models Using lme4. _Journal of Statistical Software_, 67(1):1-48, 2015.\n",
        "\n",
        "2. Arthur P. Dempster, Nan M. Laird, and Donald B. Rubin. Maximum likelihood from incomplete data via the EM algorithm. _Journal of the Royal Statistical Society, Series B (Methodological)_, 1-38, 1977.\n",
        "\n",
        "3. Andrew Gelman and Jennifer Hill. _Data analysis using regression and multilevel/hierarchical models._ Cambridge University Press, 2006.\n",
        "\n",
        "4. David A. Harville. Maximum likelihood approaches to variance component estimation and to related problems. _Journal of the American Statistical Association_, 72(358):320-338, 1977.\n",
        "\n",
        "5. Michael I. Jordan. An Introduction to Graphical Models. Technical Report, 2003.\n",
        "\n",
        "6. Nan M. Laird and James Ware. Random-effects models for longitudinal data. _Biometrics_, 963-974, 1982.\n",
        "\n",
        "7. Greg Wei and Martin A. Tanner. A Monte Carlo implementation of the EM algorithm and the poor man's data augmentation algorithms. _Journal of the American Statistical Association_, 699-704, 1990."
      ]
    }
  ],
  "metadata": {
    "colab": {
      "collapsed_sections": [],
      "default_view": {},
      "last_runtime": {
        "build_target": "",
        "kind": "local"
      },
      "name": "Linear Mixed Effects Models",
      "provenance": [
        {
          "file_id": "15xjNE2yTfHzf_DQGkgGkoBju3b7l1QvU",
          "timestamp": 1521845111308
        }
      ],
      "version": "0.3.2",
      "views": {}
    },
    "kernelspec": {
      "display_name": "Python 2",
      "language": "python",
      "name": "python2"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 0
}
